]> git.baikalelectronics.ru Git - kernel.git/commitdiff
Bluetooth: ISO: Fix handling of listen for unicast
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 28 Aug 2023 20:05:45 +0000 (13:05 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 10 Oct 2023 20:00:40 +0000 (22:00 +0200)
[ Upstream commit e0275ea52169412b8faccb4e2f4fed8a057844c6 ]

iso_listen_cis shall only return -EADDRINUSE if the listening socket has
the destination set to BDADDR_ANY otherwise if the destination is set to
a specific address it is for broadcast which shall be ignored.

Fixes: f764a6c2c1e4 ("Bluetooth: ISO: Add broadcast support")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
net/bluetooth/iso.c

index 5cd2e775915be0bf64ceb00247ce221c597d93da..91e990accbf2050324bb313d56e6478d7f64bcb7 100644 (file)
@@ -458,7 +458,7 @@ drop:
 }
 
 /* -------- Socket interface ---------- */
-static struct sock *__iso_get_sock_listen_by_addr(bdaddr_t *ba)
+static struct sock *__iso_get_sock_listen_by_addr(bdaddr_t *src, bdaddr_t *dst)
 {
        struct sock *sk;
 
@@ -466,7 +466,10 @@ static struct sock *__iso_get_sock_listen_by_addr(bdaddr_t *ba)
                if (sk->sk_state != BT_LISTEN)
                        continue;
 
-               if (!bacmp(&iso_pi(sk)->src, ba))
+               if (bacmp(&iso_pi(sk)->dst, dst))
+                       continue;
+
+               if (!bacmp(&iso_pi(sk)->src, src))
                        return sk;
        }
 
@@ -910,7 +913,7 @@ static int iso_listen_cis(struct sock *sk)
 
        write_lock(&iso_sk_list.lock);
 
-       if (__iso_get_sock_listen_by_addr(&iso_pi(sk)->src))
+       if (__iso_get_sock_listen_by_addr(&iso_pi(sk)->src, &iso_pi(sk)->dst))
                err = -EADDRINUSE;
 
        write_unlock(&iso_sk_list.lock);