* [RFC PATCH] Bluetooth: L2CAP: tolerate zero-ident LE credit indications
@ 2026-10-13 3:19 Kyle Pepper
2026-10-13 4:20 ` [RFC] " bluez.test.bot
2026-10-13 14:43 ` [RFC PATCH] " Luiz Augusto von Dentz
0 siblings, 2 replies; 3+ messages in thread
From: Kyle Pepper @ 2026-10-13 3:19 UTC (permalink / raw)
To: linux-bluetooth; +Cc: Marcel Holtmann, Luiz Augusto von Dentz, linux-kernel
A nonconforming ASHA peer sends identifier-zero credit indications
that are discarded, reducing usable transmit credits until audio stalls.
Tolerate only exact-size credit indications for a connected LE CoC.
Preserve the channel reference, lock and credit-overflow checks and do
not send a response with identifier zero. Other zero-ID commands and
BR/EDR signaling remain unchanged.
Core Vol 3 Part A section 4 forbids identifier zero. This is an
interoperability RFC requiring maintainer agreement, not a conformance
fix or a claim of automatic stream recovery.
Assisted-by: OpenCode:gpt-6.1-sol
Signed-off-by: Kyle Pepper <cochcoder@proton.me>
---
Submission review notes (not part of the commit message):
Core specification forbids identifier zero. This is a narrow opcode
interoperability exception, not a conformance fix. N8 captures contain
zero-ID credit indications. Native malformed/overflow/teardown and
lockdep/KASAN coverage and exception policy remain review gates.
net/bluetooth/l2cap_core.c | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index 49a998804..1a0868437 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -5328,6 +5328,12 @@ static inline int l2cap_le_credits(struct l2cap_conn *conn,
l2cap_chan_lock(chan);
+ /* Tolerate identifier-zero credits only for a live LE CoC. */
+ if (!cmd->ident &&
+ (!credits || chan->state != BT_CONNECTED ||
+ chan->mode != L2CAP_MODE_LE_FLOWCTL))
+ goto unlock;
+
max_credits = LE_FLOWCTL_MAX_CREDITS - chan->tx_credits;
if (credits > max_credits) {
BT_ERR("LE credits overflow");
@@ -5923,11 +5929,21 @@ static inline void l2cap_le_sig_channel(struct l2cap_conn *conn,
BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd->code, len, cmd->ident);
- if (len != skb->len || !cmd->ident) {
+ if (len != skb->len) {
BT_DBG("corrupted command");
goto drop;
}
+ if (!cmd->ident) {
+ if (cmd->code != L2CAP_LE_CREDITS ||
+ len != sizeof(struct l2cap_le_credits))
+ goto drop;
+
+ /* Credits have no response or identifier-matched transaction. */
+ l2cap_le_credits(conn, cmd, len, skb->data);
+ goto drop;
+ }
+
err = l2cap_le_sig_cmd(conn, cmd, len, skb->data);
if (err) {
struct l2cap_cmd_rej_unk rej;
base-commit: 964430c038967fd06643e866f68115664e1a1bd1
^ permalink raw reply related [flat|nested] 3+ messages in thread* RE: [RFC] Bluetooth: L2CAP: tolerate zero-ident LE credit indications
2026-10-13 3:19 [RFC PATCH] Bluetooth: L2CAP: tolerate zero-ident LE credit indications Kyle Pepper
@ 2026-10-13 4:20 ` bluez.test.bot
2026-10-13 14:43 ` [RFC PATCH] " Luiz Augusto von Dentz
1 sibling, 0 replies; 3+ messages in thread
From: bluez.test.bot @ 2026-10-13 4:20 UTC (permalink / raw)
To: linux-bluetooth, cochcoder
[-- Attachment #1: Type: text/plain, Size: 1073 bytes --]
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/series/1184328/
---Test result---
Test Summary:
CheckPatch PASS 0.52 seconds
VerifyFixes PASS 0.08 seconds
VerifySignedoff PASS 0.08 seconds
GitLint PASS 0.23 seconds
SubjectPrefix PASS 0.07 seconds
BuildKernel PASS 21.37 seconds
CheckAllWarning PASS 25.54 seconds
CheckSparse PASS 27.19 seconds
BuildKernel32 PASS 22.33 seconds
CheckKernelLLVM PASS 24.27 seconds
TestRunnerSetup PASS 508.85 seconds
TestRunner_l2cap-tester PASS 13.31 seconds
IncrementalBuild PASS 20.81 seconds
https://github.com/bluez/bluetooth-next/pull/907
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [RFC PATCH] Bluetooth: L2CAP: tolerate zero-ident LE credit indications
2026-10-13 3:19 [RFC PATCH] Bluetooth: L2CAP: tolerate zero-ident LE credit indications Kyle Pepper
2026-10-13 4:20 ` [RFC] " bluez.test.bot
@ 2026-10-13 14:43 ` Luiz Augusto von Dentz
1 sibling, 0 replies; 3+ messages in thread
From: Luiz Augusto von Dentz @ 2026-10-13 14:43 UTC (permalink / raw)
To: Kyle Pepper; +Cc: linux-bluetooth, Marcel Holtmann, linux-kernel
Hi Kyle,
On Mon, Oct 12, 2026 at 11:20 PM Kyle Pepper <cochcoder@proton.me> wrote:
>
> A nonconforming ASHA peer sends identifier-zero credit indications
> that are discarded, reducing usable transmit credits until audio stalls.
>
> Tolerate only exact-size credit indications for a connected LE CoC.
> Preserve the channel reference, lock and credit-overflow checks and do
> not send a response with identifier zero. Other zero-ID commands and
> BR/EDR signaling remain unchanged.
>
> Core Vol 3 Part A section 4 forbids identifier zero. This is an
> interoperability RFC requiring maintainer agreement, not a conformance
> fix or a claim of automatic stream recovery.
>
> Assisted-by: OpenCode:gpt-6.1-sol
> Signed-off-by: Kyle Pepper <cochcoder@proton.me>
> ---
> Submission review notes (not part of the commit message):
> Core specification forbids identifier zero. This is a narrow opcode
> interoperability exception, not a conformance fix. N8 captures contain
> zero-ID credit indications. Native malformed/overflow/teardown and
> lockdep/KASAN coverage and exception policy remain review gates.
>
> net/bluetooth/l2cap_core.c | 18 +++++++++++++++++-
> 1 file changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
> index 49a998804..1a0868437 100644
> --- a/net/bluetooth/l2cap_core.c
> +++ b/net/bluetooth/l2cap_core.c
> @@ -5328,6 +5328,12 @@ static inline int l2cap_le_credits(struct l2cap_conn *conn,
>
> l2cap_chan_lock(chan);
>
> + /* Tolerate identifier-zero credits only for a live LE CoC. */
> + if (!cmd->ident &&
> + (!credits || chan->state != BT_CONNECTED ||
> + chan->mode != L2CAP_MODE_LE_FLOWCTL))
> + goto unlock;
> +
> max_credits = LE_FLOWCTL_MAX_CREDITS - chan->tx_credits;
> if (credits > max_credits) {
> BT_ERR("LE credits overflow");
> @@ -5923,11 +5929,21 @@ static inline void l2cap_le_sig_channel(struct l2cap_conn *conn,
>
> BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd->code, len, cmd->ident);
>
> - if (len != skb->len || !cmd->ident) {
> + if (len != skb->len) {
> BT_DBG("corrupted command");
> goto drop;
> }
>
> + if (!cmd->ident) {
> + if (cmd->code != L2CAP_LE_CREDITS ||
> + len != sizeof(struct l2cap_le_credits))
> + goto drop;
> +
> + /* Credits have no response or identifier-matched transaction. */
> + l2cap_le_credits(conn, cmd, len, skb->data);
> + goto drop;
> + }
> +
> err = l2cap_le_sig_cmd(conn, cmd, len, skb->data);
> if (err) {
> struct l2cap_cmd_rej_unk rej;
>
> base-commit: 964430c038967fd06643e866f68115664e1a1bd1
Sashiko flagged a problem with this:
https://sashiko.dev/#/patchset/20261013031943.489829-1-cochcoder%40proton.me
--
Luiz Augusto von Dentz
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-10-13 14:44 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-13 3:19 [RFC PATCH] Bluetooth: L2CAP: tolerate zero-ident LE credit indications Kyle Pepper
2026-10-13 4:20 ` [RFC] " bluez.test.bot
2026-10-13 14:43 ` [RFC PATCH] " Luiz Augusto von Dentz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox