Skip to content

Commit

Permalink
Bluetooth: Reject incoming SCO connections without listeners
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Marcel Holtmann committed Feb 27, 2009
1 parent f66dc81 commit 71aeeaa
Showing 1 changed file with 22 additions and 2 deletions.
24 changes: 22 additions & 2 deletions net/bluetooth/sco.c
Original file line number Diff line number Diff line change
Expand Up @@ -857,10 +857,30 @@ static void sco_conn_ready(struct sco_conn *conn)
/* ----- SCO interface with lower layer (HCI) ----- */
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));

/* Always accept connection */
return HCI_LM_ACCEPT;
/* Find listening sockets */
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)
Expand Down

0 comments on commit 71aeeaa

Please sign in to comment.