Bluetooth: ISO: Fix handling of listen for unicast
[ Upstream commite0275ea521
] 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> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
c201d944bc
commit
6bfc4c7043
|
@ -458,7 +458,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;
|
||||
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue