Bluetooth: Fix advertising duplicated flags
Instances may have flags set as part of its data in which case the code
should not attempt to add it again otherwise it can cause duplication:
< HCI Command: LE Set Extended Advertising Data (0x08|0x0037) plen 35
Handle: 0x00
Operation: Complete extended advertising data (0x03)
Fragment preference: Minimize fragmentation (0x01)
Data length: 0x06
Flags: 0x04
BR/EDR Not Supported
Flags: 0x06
LE General Discoverable Mode
BR/EDR Not Supported
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
committed by
Johan Hedberg
parent
492ad783a1
commit
6012b9346d
@@ -1273,6 +1273,14 @@ static u8 create_instance_adv_data(struct hci_dev *hdev, u8 instance, u8 *ptr)
|
|||||||
|
|
||||||
instance_flags = get_adv_instance_flags(hdev, instance);
|
instance_flags = get_adv_instance_flags(hdev, instance);
|
||||||
|
|
||||||
|
/* If instance already has the flags set skip adding it once
|
||||||
|
* again.
|
||||||
|
*/
|
||||||
|
if (adv_instance && eir_get_data(adv_instance->adv_data,
|
||||||
|
adv_instance->adv_data_len, EIR_FLAGS,
|
||||||
|
NULL))
|
||||||
|
goto skip_flags;
|
||||||
|
|
||||||
/* The Add Advertising command allows userspace to set both the general
|
/* The Add Advertising command allows userspace to set both the general
|
||||||
* and limited discoverable flags.
|
* and limited discoverable flags.
|
||||||
*/
|
*/
|
||||||
@@ -1305,6 +1313,7 @@ static u8 create_instance_adv_data(struct hci_dev *hdev, u8 instance, u8 *ptr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
skip_flags:
|
||||||
if (adv_instance) {
|
if (adv_instance) {
|
||||||
memcpy(ptr, adv_instance->adv_data,
|
memcpy(ptr, adv_instance->adv_data,
|
||||||
adv_instance->adv_data_len);
|
adv_instance->adv_data_len);
|
||||||
|
|||||||
Reference in New Issue
Block a user