|
@@ -193,6 +193,11 @@ static u8 mgmt_status_table[] = {
|
|
|
MGMT_STATUS_CONNECT_FAILED, /* MAC Connection Failed */
|
|
|
};
|
|
|
|
|
|
+bool mgmt_valid_hdev(struct hci_dev *hdev)
|
|
|
+{
|
|
|
+ return hdev->dev_type == HCI_BREDR;
|
|
|
+}
|
|
|
+
|
|
|
static u8 mgmt_status(u8 hci_status)
|
|
|
{
|
|
|
if (hci_status < ARRAY_SIZE(mgmt_status_table))
|
|
@@ -317,7 +322,6 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
|
|
|
u16 data_len)
|
|
|
{
|
|
|
struct mgmt_rp_read_index_list *rp;
|
|
|
- struct list_head *p;
|
|
|
struct hci_dev *d;
|
|
|
size_t rp_len;
|
|
|
u16 count;
|
|
@@ -328,7 +332,10 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
|
|
|
read_lock(&hci_dev_list_lock);
|
|
|
|
|
|
count = 0;
|
|
|
- list_for_each(p, &hci_dev_list) {
|
|
|
+ list_for_each_entry(d, &hci_dev_list, list) {
|
|
|
+ if (!mgmt_valid_hdev(d))
|
|
|
+ continue;
|
|
|
+
|
|
|
count++;
|
|
|
}
|
|
|
|
|
@@ -346,6 +353,9 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,
|
|
|
if (test_bit(HCI_SETUP, &d->dev_flags))
|
|
|
continue;
|
|
|
|
|
|
+ if (!mgmt_valid_hdev(d))
|
|
|
+ continue;
|
|
|
+
|
|
|
rp->index[i++] = cpu_to_le16(d->id);
|
|
|
BT_DBG("Added hci%u", d->id);
|
|
|
}
|
|
@@ -2820,6 +2830,9 @@ static void cmd_status_rsp(struct pending_cmd *cmd, void *data)
|
|
|
|
|
|
int mgmt_index_added(struct hci_dev *hdev)
|
|
|
{
|
|
|
+ if (!mgmt_valid_hdev(hdev))
|
|
|
+ return -ENOTSUPP;
|
|
|
+
|
|
|
return mgmt_event(MGMT_EV_INDEX_ADDED, hdev, NULL, 0, NULL);
|
|
|
}
|
|
|
|
|
@@ -2827,6 +2840,9 @@ int mgmt_index_removed(struct hci_dev *hdev)
|
|
|
{
|
|
|
u8 status = MGMT_STATUS_INVALID_INDEX;
|
|
|
|
|
|
+ if (!mgmt_valid_hdev(hdev))
|
|
|
+ return -ENOTSUPP;
|
|
|
+
|
|
|
mgmt_pending_foreach(0, hdev, cmd_status_rsp, &status);
|
|
|
|
|
|
return mgmt_event(MGMT_EV_INDEX_REMOVED, hdev, NULL, 0, NULL);
|