Skip to content

Commit

Permalink
Bluetooth: mgmt: Fix count parameter in get_connections reply
Browse files Browse the repository at this point in the history
This patch fixes the count parameter in the Get Connections reply
message. We cannot know the right number until iterating through all
connections so set the parameter value only after the loop.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Johan Hedberg committed Feb 23, 2012
1 parent b3fb611 commit 60fc5fb
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions net/bluetooth/mgmt.c
Original file line number Diff line number Diff line change
Expand Up @@ -1725,8 +1725,8 @@ static int get_connections(struct sock *sk, u16 index)
struct hci_dev *hdev;
struct hci_conn *c;
size_t rp_len;
u16 count;
int i, err;
int err;
u16 i;

BT_DBG("");

Expand All @@ -1743,21 +1743,19 @@ static int get_connections(struct sock *sk, u16 index)
goto unlock;
}

count = 0;
i = 0;
list_for_each_entry(c, &hdev->conn_hash.list, list) {
if (test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
count++;
i++;
}

rp_len = sizeof(*rp) + (count * sizeof(struct mgmt_addr_info));
rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));
rp = kmalloc(rp_len, GFP_ATOMIC);
if (!rp) {
err = -ENOMEM;
goto unlock;
}

put_unaligned_le16(count, &rp->conn_count);

i = 0;
list_for_each_entry(c, &hdev->conn_hash.list, list) {
if (!test_bit(HCI_CONN_MGMT_CONNECTED, &c->flags))
Expand All @@ -1769,6 +1767,8 @@ static int get_connections(struct sock *sk, u16 index)
i++;
}

put_unaligned_le16(i, &rp->conn_count);

/* Recalculate length in case of filtered SCO connections, etc */
rp_len = sizeof(*rp) + (i * sizeof(struct mgmt_addr_info));

Expand Down

0 comments on commit 60fc5fb

Please sign in to comment.