Skip to content

Commit 26741d1

Browse files
laxmanacharya8gregkh
authored andcommitted
Bluetooth: hci_event: validate LE Set CIG Parameters response
commit 0acd4ee upstream. The Command Complete dispatch validates only the fixed part of the LE Set CIG Parameters response. After that part is pulled from the skb, hci_cc_le_set_cig_params() trusts num_handles and reads each entry in the trailing handle array. Matching num_handles against the command's num_cis does not guarantee that the response contains the advertised handles. A truncated response from a malfunctioning controller can therefore make the handler read beyond the skb data. Validate that the remaining skb data contains all advertised handles. Include this in the existing response validation so malformed responses also follow the established CIG failure handling. Fixes: 26afbd8 ("Bluetooth: Add initial implementation of CIS connections") Cc: stable@vger.kernel.org Signed-off-by: Laxman Acharya Padhya <acharyalaxman8848@gmail.com> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 0628cc9 commit 26741d1

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

net/bluetooth/hci_event.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3798,8 +3798,10 @@ static u8 hci_cc_le_set_cig_params(struct hci_dev *hdev, void *data,
37983798
bt_dev_dbg(hdev, "status 0x%2.2x", rp->status);
37993799

38003800
cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_CIG_PARAMS);
3801-
if (!rp->status && (!cp || rp->num_handles != cp->num_cis ||
3802-
rp->cig_id != cp->cig_id)) {
3801+
if (!rp->status &&
3802+
(!cp || rp->num_handles != cp->num_cis ||
3803+
rp->cig_id != cp->cig_id ||
3804+
skb->len < array_size(rp->num_handles, sizeof(*rp->handle)))) {
38033805
bt_dev_err(hdev, "unexpected Set CIG Parameters response data");
38043806
status = HCI_ERROR_UNSPECIFIED;
38053807
}

0 commit comments

Comments
 (0)