@@ -711,7 +711,16 @@ static int add_to_white_list(struct hci_request *req,
/* White list can not be used with RPAs */
if (!allow_rpa &&
hci_find_irk_by_addr(hdev, ¶ms->addr, params->addr_type)) {
- return -1;
+ /* White list can not be used with RPAs if address
+ * resolution is disabled in the controller
+ */
+ if (!hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION))
+ return -1;
+
+ /* if the peer device is not present in the resolving list */
+ if (!hci_bdaddr_list_lookup_with_irk(&hdev->le_resolv_list, &b->bdaddr,
+ b->bdaddr_type))
+ return -1;
}
/* During suspend, only wakeable devices can be in whitelist */
@@ -768,7 +777,16 @@ static u8 update_white_list(struct hci_request *req)
/* White list can not be used with RPAs */
if (!allow_rpa &&
hci_find_irk_by_addr(hdev, &b->bdaddr, b->bdaddr_type)) {
- return 0x00;
+ /* White list can not be used with RPAs if address
+ * resolution is disabled in the controller
+ */
+ if (!hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION))
+ return 0x00;
+
+ /* if the peer device is not present in the resolving list */
+ if (!hci_bdaddr_list_lookup_with_irk(&hdev->le_resolv_list, &b->bdaddr,
+ b->bdaddr_type))
+ return 0x00;
}
num_entries++;
Update white list filter policy of if LL Privacy is enabled When Address Resolution is enabled and device is already in the white list then follow the filter policy Signed-off-by: Sathish Narsimman <sathish.narasimman@intel.com> --- net/bluetooth/hci_request.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-)