Bluetooth: Disallow LE scanning and connecting in peripheral role
authorJohan Hedberg <johan.hedberg@intel.com>
Wed, 24 Oct 2012 18:12:03 +0000 (21:12 +0300)
committerGustavo Padovan <gustavo.padovan@collabora.co.uk>
Thu, 1 Nov 2012 22:26:58 +0000 (20:26 -0200)
When an adapter is in the LE peripheral role scanning for other devices
or initiating connections to them is not allowed. This patch makes sure
that such attempts will result in appropriate error returns.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk>
net/bluetooth/hci_conn.c
net/bluetooth/hci_core.c

index 6dcf4523df3c6a9fb320703b89e41011bbc489da..dc331ceca471351145b2c44ef3a1af05f53c3d5d 100644 (file)
@@ -502,6 +502,9 @@ static struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
 {
        struct hci_conn *le;
 
+       if (test_bit(HCI_LE_PERIPHERAL, &hdev->flags))
+               return ERR_PTR(-ENOTSUPP);
+
        le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
        if (!le) {
                le = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
index 5a3400d8a6e5c078e37c154daa2bdb376086fbb8..515d0c394f35e29820801444e3a9d4510e549f2d 100644 (file)
@@ -1577,6 +1577,9 @@ int hci_le_scan(struct hci_dev *hdev, u8 type, u16 interval, u16 window,
 
        BT_DBG("%s", hdev->name);
 
+       if (test_bit(HCI_LE_PERIPHERAL, &hdev->dev_flags))
+               return -ENOTSUPP;
+
        if (work_busy(&hdev->le_scan))
                return -EINPROGRESS;