Skip to content

Commit

Permalink
Bluetooth: Add extra channel checks for control open/close messages
Browse files Browse the repository at this point in the history
The control open and close monitoring events require special channel
checks to ensure messages are only send when the right events happen.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
  • Loading branch information
Marcel Holtmann committed Sep 19, 2016
1 parent 5a6d2cf commit d0bef1d
Showing 1 changed file with 19 additions and 5 deletions.
24 changes: 19 additions & 5 deletions net/bluetooth/hci_sock.c
Original file line number Diff line number Diff line change
Expand Up @@ -479,19 +479,28 @@ static struct sk_buff *create_monitor_ctrl_open(struct sock *sk)
{
struct hci_mon_hdr *hdr;
struct sk_buff *skb;
u16 format = 0x0002;
u16 format;
u8 ver[3];
u32 flags;

/* No message needed when cookie is not present */
if (!hci_pi(sk)->cookie)
return NULL;

switch (hci_pi(sk)->channel) {
case HCI_CHANNEL_CONTROL:
format = 0x0002;
mgmt_fill_version_info(ver);
break;
default:
/* No message for unsupported format */
return NULL;
}

skb = bt_skb_alloc(14 + TASK_COMM_LEN , GFP_ATOMIC);
if (!skb)
return NULL;

mgmt_fill_version_info(ver);
flags = hci_sock_test_flag(sk, HCI_SOCK_TRUSTED) ? 0x1 : 0x0;

put_unaligned_le32(hci_pi(sk)->cookie, skb_put(skb, 4));
Expand Down Expand Up @@ -523,6 +532,14 @@ static struct sk_buff *create_monitor_ctrl_close(struct sock *sk)
if (!hci_pi(sk)->cookie)
return NULL;

switch (hci_pi(sk)->channel) {
case HCI_CHANNEL_CONTROL:
break;
default:
/* No message for unsupported format */
return NULL;
}

skb = bt_skb_alloc(4, GFP_ATOMIC);
if (!skb)
return NULL;
Expand Down Expand Up @@ -652,9 +669,6 @@ static void send_monitor_control_replay(struct sock *mon_sk)
sk_for_each(sk, &hci_sk_list.head) {
struct sk_buff *skb;

if (hci_pi(sk)->channel != HCI_CHANNEL_CONTROL)
continue;

skb = create_monitor_ctrl_open(sk);
if (!skb)
continue;
Expand Down

0 comments on commit d0bef1d

Please sign in to comment.