diff options
| author | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2025-10-06 16:53:35 -0400 |
|---|---|---|
| committer | Luiz Augusto von Dentz <luiz.von.dentz@intel.com> | 2025-12-01 16:00:06 -0500 |
| commit | 577cf4c0a1e8471a0d6c0f36bb3716285e27ad5e (patch) | |
| tree | d263336a52577f94ccf2c4e05d4361286e186b27 | |
| parent | a3b76bf4c4c90994248e3211b300d2d9834874f9 (diff) | |
| download | linux-577cf4c0a1e8471a0d6c0f36bb3716285e27ad5e.tar.gz | |
Bluetooth: ISO: Fix not updating BIS sender source address
The source address for a BIS sender/Broadcast Source shall be updated
with the advertisement address since in case privacy is enabled it may
use an RPA rather than an identity address.
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
| -rw-r--r-- | net/bluetooth/iso.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c index fd56eebe924568..4bce03c8a8d30f 100644 --- a/net/bluetooth/iso.c +++ b/net/bluetooth/iso.c @@ -2034,6 +2034,25 @@ static void iso_conn_ready(struct iso_conn *conn) BT_DBG("conn %p", conn); if (sk) { + /* Attempt to update source address in case of BIS Sender if + * the advertisement is using a random address. + */ + if (conn->hcon->type == BIS_LINK && + conn->hcon->role == HCI_ROLE_MASTER && + !bacmp(&conn->hcon->dst, BDADDR_ANY)) { + struct hci_conn *bis = conn->hcon; + struct adv_info *adv; + + adv = hci_find_adv_instance(bis->hdev, + bis->iso_qos.bcast.bis); + if (adv && bacmp(&adv->random_addr, BDADDR_ANY)) { + lock_sock(sk); + iso_pi(sk)->src_type = BDADDR_LE_RANDOM; + bacpy(&iso_pi(sk)->src, &adv->random_addr); + release_sock(sk); + } + } + iso_sock_ready(conn->sk); } else { hcon = conn->hcon; |
