Skip to content

Commit 184f053

Browse files
sjanccfriedt
authored andcommitted
tests: Bluetooth: Tester: Fix NULL pointer dereference
PA sync can be terminated before BIG sync is stopped. This results in ps_sync being NULL and thus crash in stop callback. Simply store address needed by BTP events and don't rely on pa_sync. Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
1 parent 28edc26 commit 184f053

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

tests/bluetooth/tester/src/btp_gap.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2484,6 +2484,7 @@ static int bt_iso_chan_get_index(struct bt_iso_chan *chan);
24842484

24852485
#if defined(CONFIG_BT_ISO_SYNC_RECEIVER)
24862486
static struct bt_iso_big *iso_sync_receiver_big;
2487+
static bt_addr_le_t iso_sync_receiver_addr;
24872488

24882489
static void iso_sync_receiver_big_started_cb(struct bt_iso_big *big)
24892490
{
@@ -2519,7 +2520,7 @@ static void iso_sync_receiver_big_started_cb(struct bt_iso_big *big)
25192520
return;
25202521
}
25212522

2522-
bt_addr_le_copy(&ev.address, &pa_sync->addr);
2523+
bt_addr_le_copy(&ev.address, &iso_sync_receiver_addr);
25232524
ev.latency = sys_cpu_to_le32(info.sync_receiver.latency);
25242525
ev.nse = info.max_subevent;
25252526
ev.bn = info.sync_receiver.bn;
@@ -2539,12 +2540,13 @@ static void iso_sync_receiver_big_stopped_cb(struct bt_iso_big *big, uint8_t rea
25392540
return;
25402541
}
25412542

2542-
bt_addr_le_copy(&ev.address, &pa_sync->addr);
2543+
bt_addr_le_copy(&ev.address, &iso_sync_receiver_addr);
25432544
ev.reason = reason;
25442545

25452546
tester_event(BTP_SERVICE_ID_GAP, BTP_GAP_EV_BIG_SYNC_LOST, &ev, sizeof(ev));
25462547

25472548
iso_sync_receiver_big = NULL;
2549+
bt_addr_le_copy(&iso_sync_receiver_addr, BT_ADDR_LE_NONE);
25482550
}
25492551

25502552
static struct bt_iso_big_cb iso_sync_receiver_big_cb = {
@@ -2767,6 +2769,9 @@ static uint8_t big_create_sync(const void *cmd, uint16_t cmd_len, void *rsp, uin
27672769
return BTP_STATUS_FAILED;
27682770
}
27692771

2772+
/* PA may be terminated so just store addr here */
2773+
bt_addr_le_copy(&iso_sync_receiver_addr, &pa_sync->addr);
2774+
27702775
LOG_DBG("BIG syncing");
27712776

27722777
return BTP_STATUS_SUCCESS;

0 commit comments

Comments
 (0)