Bluetooth: ISO: Fix handling of listen for unicast
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: f764a6c2c1
("Bluetooth: ISO: Add broadcast support")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
parent
c7eaf80bfb
commit
e0275ea521
|
@ -502,7 +502,7 @@ static void iso_recv_frame(struct iso_conn *conn, struct sk_buff *skb)
|
|||
}
|
||||
|
||||
/* -------- 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;
|
||||
|
||||
|
@ -510,7 +510,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;
|
||||
}
|
||||
|
||||
|
@ -952,7 +955,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);
|
||||
|
|
Loading…
Reference in New Issue