FAILED: patch "[PATCH] Bluetooth: hci_event: validate LE Set CIG Parameters response" failed to apply to 6.1-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 6.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.1.y
git checkout FETCH_HEAD
git cherry-pick -x 0acd4eeb4b225b9bebbf9ef96cc10cdd79b94899
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026082559-suspect-staff-6aaa@gregkh' --subject-prefix 'PATCH 6.1.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 0acd4eeb4b225b9bebbf9ef96cc10cdd79b94899 Mon Sep 17 00:00:00 2001
From: Laxman Acharya Padhya <[email protected]>
Date: Sat, 1 Aug 2026 23:54:52 +0545
Subject: [PATCH] Bluetooth: hci_event: validate LE Set CIG Parameters response
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.
net/bluetooth/hci_event.c +4 -2
@@ -3865,8 +3865,10 @@ static u8 hci_cc_le_set_cig_params(struct hci_dev *hdev, void *data,bt_dev_dbg (hdev,"status 0x%2.2x" , rp->status); cp =hci_sent_cmd_data (hdev,HCI_OP_LE_SET_CIG_PARAMS ); -if (!rp->status && (!cp || rp->num_handles != cp->num_cis || - rp->cig_id != cp->cig_id)) { +if (!rp->status && + (!cp || rp->num_handles != cp->num_cis || + rp->cig_id != cp->cig_id || + skb->len <array_size (rp->num_handles,sizeof (*rp->handle)))) {bt_dev_err (hdev,"unexpected Set CIG Parameters response data" ); status =HCI_ERROR_UNSPECIFIED ; }
Sasha Levin
maintainerPATCH 1/4 Bluetooth: hci_conn: Fix not matching by CIS ID
From: Luiz Augusto von Dentz <[email protected]>
[ Upstream commit c14516faede33c2c31da45cf950d55dbff42962e ]
This fixes only matching CIS by address which prevents creating new hcon if upper layer is requesting a specific CIS ID.
Stable-dep-of: 0acd4eeb4b22 ("Bluetooth: hci_event: validate LE Set CIG Parameters response")
--- include/net/bluetooth/hci_core.h | 12 +++++++++++- net/bluetooth/hci_conn.c | 3 ++- 2 files changed, 13 insertions(+), 2 deletions(-)
include/net/bluetooth/hci_core.h +11 -1
@@ -1178,7 +1178,9 @@ static inline struct hci_conn *hci_conn_hash_lookup_le(struct hci_dev *hdev,static inline struct hci_conn *hci_conn_hash_lookup_cis (struct hci_dev *hdev,bdaddr_t *ba, -__u8 ba_type) +__u8 ba_type, +__u8 cig, +__u8 id) {struct hci_conn_hash *h = &hdev->conn_hash;struct hci_conn *c;
@@ -1189,6 +1191,14 @@ static inline struct hci_conn *hci_conn_hash_lookup_cis(struct hci_dev *hdev,if (c->type !=ISO_LINK )continue ; +/* Match CIG ID if set */ +if (cig !=BT_ISO_QOS_CIG_UNSET && cig != c->iso_qos.ucast.cig) +continue ; + +/* Match CIS ID if set */ +if (id !=BT_ISO_QOS_CIS_UNSET && id != c->iso_qos.ucast.cis) +continue ; +if (ba_type == c->dst_type && !bacmp (&c->dst, ba)) {rcu_read_unlock ();return c;
net/bluetooth/hci_conn.c +2 -1
@@ -1862,7 +1862,8 @@ struct hci_conn *hci_bind_cis(struct hci_dev *hdev, bdaddr_t *dst, {struct hci_conn *cis; - cis =hci_conn_hash_lookup_cis (hdev, dst, dst_type); + cis =hci_conn_hash_lookup_cis (hdev, dst, dst_type, qos->ucast.cig, + qos->ucast.cis);if (!cis) { cis =hci_conn_add_unset (hdev,ISO_LINK , dst,HCI_ROLE_MASTER );if (!cis)
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/4 Bluetooth: ISO: use correct CIS order in Set CIG Parameters event
From: Pauli Virtanen <[email protected]>
[ Upstream commit 71e9588435c38112d6a8686d3d8e7cc1de8fe22c ]
The order of CIS handle array in Set CIG Parameters response shall match the order of the CIS_ID array in the command (Core v5.3 Vol 4 Part E Sec 7.8.97). We send CIS_IDs mainly in the order of increasing CIS_ID (but with "last" CIS first if it has fixed CIG_ID). In handling of the reply, we currently assume this is also the same as the order of hci_conn in hdev->conn_hash, but that is not true.
Match the correct hci_conn to the correct handle by matching them based on the CIG+CIS combination. The CIG+CIS combination shall be unique for ISO_LINK hci_conn at state >= BT_BOUND, which we maintain in hci_le_set_cig_params.
Stable-dep-of: 0acd4eeb4b22 ("Bluetooth: hci_event: validate LE Set CIG Parameters response")
--- include/net/bluetooth/hci_core.h | 7 +++--- net/bluetooth/hci_conn.c | 4 +-- net/bluetooth/hci_event.c | 43 +++++++++++++++++++------------- 3 files changed, 32 insertions(+), 22 deletions(-)
include/net/bluetooth/hci_core.h +4 -3
@@ -1192,14 +1192,15 @@ static inline struct hci_conn *hci_conn_hash_lookup_cis(struct hci_dev *hdev,continue ;/* Match CIG ID if set */ -if (cig !=BT_ISO_QOS_CIG_UNSET && cig != c->iso_qos.ucast.cig) +if (cig !=BT_ISO_QOS_CIG_UNSET && cig != c->iso_qos.cig)continue ;/* Match CIS ID if set */ -if (id !=BT_ISO_QOS_CIS_UNSET && id != c->iso_qos.ucast.cis) +if (id !=BT_ISO_QOS_CIS_UNSET && id != c->iso_qos.cis)continue ; -if (ba_type == c->dst_type && !bacmp (&c->dst, ba)) { +/* Match destination address if set */ +if (!ba || (ba_type == c->dst_type && !bacmp (&c->dst, ba))) {rcu_read_unlock ();return c; }
net/bluetooth/hci_conn.c +2 -2
@@ -1862,8 +1862,8 @@ struct hci_conn *hci_bind_cis(struct hci_dev *hdev, bdaddr_t *dst, {struct hci_conn *cis; - cis =hci_conn_hash_lookup_cis (hdev, dst, dst_type, qos->ucast.cig, - qos->ucast.cis); + cis =hci_conn_hash_lookup_cis (hdev, dst, dst_type, qos->cig, + qos->cis);if (!cis) { cis =hci_conn_add_unset (hdev,ISO_LINK , dst,HCI_ROLE_MASTER );if (!cis)
net/bluetooth/hci_event.c +26 -17
75 lines not on this page · raw message
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 3/4 Bluetooth: hci_event: fix Set CIG Parameters error status handling
In reply to Sasha LevinFrom: Pauli Virtanen <[email protected]>
[ Upstream commit db9cbcadc16e8b9f0b3ef5870f3a38ebafcbe8e0 ]
If the event has error status, return right error code and don't show incorrect "response malformed" messages.
Stable-dep-of: 0acd4eeb4b22 ("Bluetooth: hci_event: validate LE Set CIG Parameters response")
--- net/bluetooth/hci_event.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/bluetooth/hci_event.c +2 -1
@@ -3791,7 +3791,8 @@ static u8 hci_cc_le_set_cig_params(struct hci_dev *hdev, void *data,bt_dev_dbg (hdev,"status 0x%2.2x" , rp->status); cp =hci_sent_cmd_data (hdev,HCI_OP_LE_SET_CIG_PARAMS ); -if (!cp || rp->num_handles != cp->num_cis || rp->cig_id != cp->cig_id) { +if (!rp->status && (!cp || rp->num_handles != cp->num_cis || + rp->cig_id != cp->cig_id)) {bt_dev_err (hdev,"unexpected Set CIG Parameters response data" ); status =HCI_ERROR_UNSPECIFIED ; }
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 4/4 Bluetooth: hci_event: validate LE Set CIG Parameters response
In reply to Sasha LevinFrom: Laxman Acharya Padhya <[email protected]>
[ Upstream commit 0acd4eeb4b225b9bebbf9ef96cc10cdd79b94899 ]
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.
--- net/bluetooth/hci_event.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
net/bluetooth/hci_event.c +4 -2
@@ -3791,8 +3791,10 @@ static u8 hci_cc_le_set_cig_params(struct hci_dev *hdev, void *data,bt_dev_dbg (hdev,"status 0x%2.2x" , rp->status); cp =hci_sent_cmd_data (hdev,HCI_OP_LE_SET_CIG_PARAMS ); -if (!rp->status && (!cp || rp->num_handles != cp->num_cis || - rp->cig_id != cp->cig_id)) { +if (!rp->status && + (!cp || rp->num_handles != cp->num_cis || + rp->cig_id != cp->cig_id || + skb->len <array_size (rp->num_handles,sizeof (*rp->handle)))) {bt_dev_err (hdev,"unexpected Set CIG Parameters response data" ); status =HCI_ERROR_UNSPECIFIED ; }
Signature · 1 line
2.53.0