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 ---------- */
|
/* -------- 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;
|
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)
|
if (sk->sk_state != BT_LISTEN)
|
||||||
continue;
|
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;
|
return sk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -910,7 +913,7 @@ static int iso_listen_cis(struct sock *sk)
|
||||||
|
|
||||||
write_lock(&iso_sk_list.lock);
|
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;
|
err = -EADDRINUSE;
|
||||||
|
|
||||||
write_unlock(&iso_sk_list.lock);
|
write_unlock(&iso_sk_list.lock);
|
||||||
|
|
Loading…
Reference in New Issue