adapter: Fix advertising monitor on Linux 5.12-5.17

The existing code assumes that, if a device supports advertising monitor
offload, DEVICE_FOUND events can be ignored since the kernel will send
ADV_MONITOR_DEVICE_FOUND events instead. Unfortunately, these new events
were added in 5.18, but offload was added in 5.12. This patch adds a
check on the MGMT API version so we can process the older DEVICE_FOUND
events when the new events are not supported.

Fixes: https://github.com/bluez/bluez/issues/357
This commit is contained in:
Andrew Drake 2022-06-30 00:39:58 -07:00 committed by Luiz Augusto von Dentz
parent 163de8e231
commit a69fa692b0

View File

@ -6907,7 +6907,9 @@ void btd_adapter_update_found_device(struct btd_adapter *adapter,
bool duplicate = false;
struct queue *matched_monitors = NULL;
if (!btd_adv_monitor_offload_enabled(adapter->adv_monitor_manager)) {
if (!btd_adv_monitor_offload_enabled(adapter->adv_monitor_manager) ||
(MGMT_VERSION(mgmt_version, mgmt_revision) <
MGMT_VERSION(1, 22))) {
if (bdaddr_type != BDADDR_BREDR)
ad = bt_ad_new_with_data(data_len, data);