0, NULL);
                }
 
+               if (hdev->commands[34] & 0x20) {
+                       /* Clear LE Resolving List */
+                       hci_req_add(req, HCI_OP_LE_CLEAR_RESOLV_LIST, 0, NULL);
+               }
+
                if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT) {
                        /* Read LE Maximum Data Length */
                        hci_req_add(req, HCI_OP_LE_READ_MAX_DATA_LEN, 0, NULL);
 
        hdev->le_def_tx_time = le16_to_cpu(sent->tx_time);
 }
 
+static void hci_cc_le_clear_resolv_list(struct hci_dev *hdev,
+                                      struct sk_buff *skb)
+{
+       __u8 status = *((__u8 *) skb->data);
+
+       BT_DBG("%s status 0x%2.2x", hdev->name, status);
+
+       if (status)
+               return;
+
+       hci_bdaddr_list_clear(&hdev->le_resolv_list);
+}
+
 static void hci_cc_le_read_resolv_list_size(struct hci_dev *hdev,
                                           struct sk_buff *skb)
 {
                hci_cc_le_write_def_data_len(hdev, skb);
                break;
 
+       case HCI_OP_LE_CLEAR_RESOLV_LIST:
+               hci_cc_le_clear_resolv_list(hdev, skb);
+               break;
+
        case HCI_OP_LE_READ_RESOLV_LIST_SIZE:
                hci_cc_le_read_resolv_list_size(hdev, skb);
                break;