]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Bluetooth: ISO: Fix using BT_SK_PA_SYNC to detect BIS sockets
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 9 Jun 2025 18:53:53 +0000 (14:53 -0400)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Wed, 11 Jun 2025 20:29:39 +0000 (16:29 -0400)
BT_SK_PA_SYNC is only valid for Broadcast Sinks which means socket used
for Broadcast Sources wouldn't be able to use the likes of getpeername
to read out the sockaddr_iso_bc fields which may have been update (e.g.
bc_sid).

Fixes: 0a766a0affb5 ("Bluetooth: ISO: Fix getpeername not returning sockaddr_iso_bc fields")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
net/bluetooth/iso.c

index 6e2c752aaa8fd5f978e79723dfe9d925092c1523..affa2077e3a294d4bebc5df49c5f70db1b06cb55 100644 (file)
@@ -1337,10 +1337,13 @@ static int iso_sock_getname(struct socket *sock, struct sockaddr *addr,
        addr->sa_family = AF_BLUETOOTH;
 
        if (peer) {
+               struct hci_conn *hcon = iso_pi(sk)->conn ?
+                                       iso_pi(sk)->conn->hcon : NULL;
+
                bacpy(&sa->iso_bdaddr, &iso_pi(sk)->dst);
                sa->iso_bdaddr_type = iso_pi(sk)->dst_type;
 
-               if (test_bit(BT_SK_PA_SYNC, &iso_pi(sk)->flags)) {
+               if (hcon && hcon->type == BIS_LINK) {
                        sa->iso_bc->bc_sid = iso_pi(sk)->bc_sid;
                        sa->iso_bc->bc_num_bis = iso_pi(sk)->bc_num_bis;
                        memcpy(sa->iso_bc->bc_bis, iso_pi(sk)->bc_bis,