diff options
Diffstat (limited to 'net/bluetooth/mgmt.c')
| -rw-r--r-- | net/bluetooth/mgmt.c | 12 | 
1 files changed, 7 insertions, 5 deletions
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c index aa2ea0a8142..91de4239da6 100644 --- a/net/bluetooth/mgmt.c +++ b/net/bluetooth/mgmt.c @@ -326,7 +326,7 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,  	struct hci_dev *d;  	size_t rp_len;  	u16 count; -	int i, err; +	int err;  	BT_DBG("sock %p", sk); @@ -347,9 +347,7 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,  		return -ENOMEM;  	} -	rp->num_controllers = cpu_to_le16(count); - -	i = 0; +	count = 0;  	list_for_each_entry(d, &hci_dev_list, list) {  		if (test_bit(HCI_SETUP, &d->dev_flags))  			continue; @@ -357,10 +355,13 @@ static int read_index_list(struct sock *sk, struct hci_dev *hdev, void *data,  		if (!mgmt_valid_hdev(d))  			continue; -		rp->index[i++] = cpu_to_le16(d->id); +		rp->index[count++] = cpu_to_le16(d->id);  		BT_DBG("Added hci%u", d->id);  	} +	rp->num_controllers = cpu_to_le16(count); +	rp_len = sizeof(*rp) + (2 * count); +  	read_unlock(&hci_dev_list_lock);  	err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, 0, rp, @@ -1366,6 +1367,7 @@ static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data,  			continue;  		list_del(&match->list); +		kfree(match);  		found++;  	}  |