forked from Minki/linux
Bluetooth: Reject incoming SCO connections without listeners
All SCO and eSCO connection are auto-accepted no matter if there is a corresponding listening socket for them. This patch changes this and connection requests for SCO and eSCO without any socket are rejected. Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
f66dc81f44
commit
71aeeaa1fd
@ -857,10 +857,30 @@ done:
|
|||||||
/* ----- SCO interface with lower layer (HCI) ----- */
|
/* ----- SCO interface with lower layer (HCI) ----- */
|
||||||
static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
|
static int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 type)
|
||||||
{
|
{
|
||||||
|
register struct sock *sk;
|
||||||
|
struct hlist_node *node;
|
||||||
|
int lm = 0;
|
||||||
|
|
||||||
|
if (type != SCO_LINK && type != ESCO_LINK)
|
||||||
|
return 0;
|
||||||
|
|
||||||
BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
|
BT_DBG("hdev %s, bdaddr %s", hdev->name, batostr(bdaddr));
|
||||||
|
|
||||||
/* Always accept connection */
|
/* Find listening sockets */
|
||||||
return HCI_LM_ACCEPT;
|
read_lock(&sco_sk_list.lock);
|
||||||
|
sk_for_each(sk, node, &sco_sk_list.head) {
|
||||||
|
if (sk->sk_state != BT_LISTEN)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr) ||
|
||||||
|
!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
|
||||||
|
lm |= HCI_LM_ACCEPT;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
read_unlock(&sco_sk_list.lock);
|
||||||
|
|
||||||
|
return lm;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
|
static int sco_connect_cfm(struct hci_conn *hcon, __u8 status)
|
||||||
|
Loading…
Reference in New Issue
Block a user