From c1d4c478c40d659f1b76bb7c38034dc161528e3d Mon Sep 17 00:00:00 2001 From: Ismagil Iskakov Date: Tue, 8 Jul 2025 14:09:04 +0300 Subject: [PATCH] bap: fix memleak of bt_bap Make failure branches deallocate memory before leaving. --- profiles/audio/bap.c | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c index a1ca26bdc..f39a40458 100644 --- a/profiles/audio/bap.c +++ b/profiles/audio/bap.c @@ -3595,32 +3595,36 @@ static int bap_bcast_probe(struct btd_service *service) struct btd_adapter *adapter = device_get_adapter(device); struct btd_gatt_database *database = btd_adapter_get_database(adapter); struct bap_data *data; + struct bt_bap *bap; if (!btd_adapter_has_exp_feature(adapter, EXP_FEAT_ISO_SOCKET)) { error("BAP requires ISO Socket which is not enabled"); return -ENOTSUP; } - data = bap_data_new(device); - data->service = service; - data->adapter = adapter; - data->device = device; - data->bap = bt_bap_new(btd_gatt_database_get_db(database), + bap = bt_bap_new(btd_gatt_database_get_db(database), btd_gatt_database_get_db(database)); - if (!data->bap) { + + if (!bap) { error("Unable to create BAP instance"); - free(data); return -EINVAL; } - data->bcast_snks = queue_new(); - bt_bap_set_user_data(data->bap, service); + bt_bap_set_user_data(bap, service); - if (!bt_bap_attach(data->bap, NULL)) { + if (!bt_bap_attach(bap, NULL)) { error("BAP unable to attach"); + bt_bap_unref(bap); return -EINVAL; } + data = bap_data_new(device); + data->service = service; + data->adapter = adapter; + data->device = device; + data->bap = bap; + data->bcast_snks = queue_new(); + bap_data_add(data); data->ready_id = bt_bap_ready_register(data->bap, bap_ready, service, -- 2.47.3