Bluetooth: Fix location of TX power field in LE advertising data
authorMarcel Holtmann <[email protected]>
Fri, 3 Apr 2015 20:23:12 +0000 (13:23 -0700)
committerJohan Hedberg <[email protected]>
Sat, 4 Apr 2015 05:50:20 +0000 (08:50 +0300)
The TX power field in the LE advertising data should be placed last
since it needs to be possible to enable kernel controlled TX power,
but still allow for userspace provided flags field.

Signed-off-by: Marcel Holtmann <[email protected]>
Signed-off-by: Johan Hedberg <[email protected]>
net/bluetooth/mgmt.c

index 20a7765680df94eb745ff0912f950084cf43897b..845dfcc43a20e79b12904eae88399d8230b1e564 100644 (file)
@@ -1043,6 +1043,14 @@ static u8 create_instance_adv_data(struct hci_dev *hdev, u8 instance, u8 *ptr)
                }
        }
 
+       if (instance) {
+               memcpy(ptr, hdev->adv_instance.adv_data,
+                      hdev->adv_instance.adv_data_len);
+
+               ad_len += hdev->adv_instance.adv_data_len;
+               ptr += hdev->adv_instance.adv_data_len;
+       }
+
        /* Provide Tx Power only if we can provide a valid value for it */
        if (hdev->adv_tx_power != HCI_TX_POWER_INVALID &&
            (instance_flags & MGMT_ADV_FLAG_TX_POWER)) {
@@ -1054,12 +1062,6 @@ static u8 create_instance_adv_data(struct hci_dev *hdev, u8 instance, u8 *ptr)
                ptr += 3;
        }
 
-       if (instance) {
-               memcpy(ptr, hdev->adv_instance.adv_data,
-                      hdev->adv_instance.adv_data_len);
-               ad_len += hdev->adv_instance.adv_data_len;
-       }
-
        return ad_len;
 }