Bluetooth: hci_core: Fix using ll_privacy_capable for current settings
authorLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Mon, 4 Aug 2025 18:05:03 +0000 (14:05 -0400)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Fri, 15 Aug 2025 13:44:49 +0000 (09:44 -0400)
ll_privacy_capable only indicates that the controller supports the
feature but it doesnt' check that LE is enabled so it end up being
marked as active in the current settings when it shouldn't.

Fixes: ad383c2c65a5 ("Bluetooth: hci_sync: Enable advertising when LL privacy is enabled")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
include/net/bluetooth/hci_core.h
net/bluetooth/mgmt.c

index bc29f2e2e16f0c23fba57fc3a1cc43f310404485..bb30bde6f0e878aef973e3b858ad18b2ccfa2357 100644 (file)
@@ -1934,6 +1934,7 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
                         ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_CODED))
 
 #define ll_privacy_capable(dev) ((dev)->le_features[0] & HCI_LE_LL_PRIVACY)
+#define ll_privacy_enabled(dev) (le_enabled(dev) && ll_privacy_capable(dev))
 
 #define privacy_mode_capable(dev) (ll_privacy_capable(dev) && \
                                   ((dev)->commands[39] & 0x04))
index c42dffe77daf44863d59684c52d7aae0f1f448a1..3166f5fb876b11843330e45e4ad997eb99b13d12 100644 (file)
@@ -934,7 +934,7 @@ static u32 get_current_settings(struct hci_dev *hdev)
        if (sync_recv_enabled(hdev))
                settings |= MGMT_SETTING_ISO_SYNC_RECEIVER;
 
-       if (ll_privacy_capable(hdev))
+       if (ll_privacy_enabled(hdev))
                settings |= MGMT_SETTING_LL_PRIVACY;
 
        return settings;