Bluetooth: mgmt: multi adv for get_adv_instance_flags()
authorFlorian Grandel <fgrandel@gmail.com>
Thu, 18 Jun 2015 01:16:40 +0000 (03:16 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Thu, 18 Jun 2015 16:11:51 +0000 (18:11 +0200)
The get_adv_instance_flags() would not work with instance identifiers
other than 0x01. This is being fixed so that arbitrary instance
identifiers can be dealt with while still correctly dealing with the
special case of the 0x00 identifier.

Signed-off-by: Florian Grandel <fgrandel@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/mgmt.c

index 55b91530ea2688b9ccdfcf9795ed3b2b52118bf2..05f14c54b7edc6e80ea8da664c58d3d557a515f6 100644 (file)
@@ -960,12 +960,17 @@ static bool get_connectable(struct hci_dev *hdev)
 static u32 get_adv_instance_flags(struct hci_dev *hdev, u8 instance)
 {
        u32 flags;
+       struct adv_info *adv_instance;
 
-       if (instance > 0x01)
-               return 0;
+       if (instance != 0x00) {
+               adv_instance = hci_find_adv_instance(hdev, instance);
 
-       if (instance == 0x01)
-               return hdev->adv_instance.flags;
+               /* Return 0 when we got an invalid instance identifier. */
+               if (!adv_instance)
+                       return 0;
+
+               return adv_instance->flags;
+       }
 
        /* Instance 0 always manages the "Tx Power" and "Flags" fields */
        flags = MGMT_ADV_FLAG_TX_POWER | MGMT_ADV_FLAG_MANAGED_FLAGS;