* [PATCH] fix: net/bluetooth: iso_conn_del: extra iso_conn_put on iso_sock_hold failure path
@ 2026-06-26 11:53 WenTao Liang
2026-06-26 13:12 ` Paul Menzel
2026-06-28 3:54 ` WenTao Liang
0 siblings, 2 replies; 3+ messages in thread
From: WenTao Liang @ 2026-06-26 11:53 UTC (permalink / raw)
To: marcel, luiz.dentz; +Cc: linux-bluetooth, linux-kernel, WenTao Liang, stable
In iso_conn_del(), iso_conn_hold_unless_zero() acquires a temporary
reference which is correctly balanced by iso_conn_put() at line 279. When
iso_sock_hold() returns NULL (sk == NULL), an additional
iso_conn_put(conn) is called, dropping hcon's reference to conn too
early. The caller (e.g., hci_conn_del) will later also iso_conn_put(),
causing a double-free or use-after-free.
Remove the extra iso_conn_put(conn) on the sk == NULL path.
Cc: stable@vger.kernel.org
Fixes: dc26097bdb86 ("Bluetooth: ISO: Use kref to track lifetime of iso_conn")
Signed-off-by: WenTao Liang <vulab@iscas.ac.cn>
---
net/bluetooth/iso.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c
index 3abd8111dda8..99755671e469 100644
--- a/net/bluetooth/iso.c
+++ b/net/bluetooth/iso.c
@@ -278,10 +278,8 @@ static void iso_conn_del(struct hci_conn *hcon, int err)
iso_conn_unlock(conn);
iso_conn_put(conn);
- if (!sk) {
- iso_conn_put(conn);
+ if (!sk)
return;
- }
lock_sock(sk);
iso_sock_clear_timer(sk);
--
2.39.5 (Apple Git-154)
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] fix: net/bluetooth: iso_conn_del: extra iso_conn_put on iso_sock_hold failure path
2026-06-26 11:53 [PATCH] fix: net/bluetooth: iso_conn_del: extra iso_conn_put on iso_sock_hold failure path WenTao Liang
@ 2026-06-26 13:12 ` Paul Menzel
2026-06-28 3:54 ` WenTao Liang
1 sibling, 0 replies; 3+ messages in thread
From: Paul Menzel @ 2026-06-26 13:12 UTC (permalink / raw)
To: WenTao Liang; +Cc: marcel, luiz.dentz, linux-bluetooth, linux-kernel, stable
Dear Wen Tao,
Thank you for your patch. Some formalities:
The prefixes are well defined, and `fix:` will make the CI fail. Also,
it’d be great if you removed the tripple space in the summary/title, and
made it a statement by adding a verb in imperative mood. Maybe:
Bluetooth: Fix extra iso_conn_put on iso_sock_hold failure path
Am 26.06.26 um 13:53 schrieb WenTao Liang:
> In iso_conn_del(), iso_conn_hold_unless_zero() acquires a temporary
> reference which is correctly balanced by iso_conn_put() at line 279. When
> iso_sock_hold() returns NULL (sk == NULL), an additional
> iso_conn_put(conn) is called, dropping hcon's reference to conn too
> early. The caller (e.g., hci_conn_del) will later also iso_conn_put(),
> causing a double-free or use-after-free.
It’s uncommon to indent any lines of a paragraph. I recommend to remove
it, and then each line also fits in 75 characters.
> Remove the extra iso_conn_put(conn) on the sk == NULL path.
Out of curiosity: Do you have a reproducer?
> Cc: stable@vger.kernel.org
> Fixes: dc26097bdb86 ("Bluetooth: ISO: Use kref to track lifetime of iso_conn")
> Signed-off-by: WenTao Liang <vulab@iscas.ac.cn>
> ---
> net/bluetooth/iso.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c
> index 3abd8111dda8..99755671e469 100644
> --- a/net/bluetooth/iso.c
> +++ b/net/bluetooth/iso.c
> @@ -278,10 +278,8 @@ static void iso_conn_del(struct hci_conn *hcon, int err)
> iso_conn_unlock(conn);
> iso_conn_put(conn);
>
> - if (!sk) {
> - iso_conn_put(conn);
> + if (!sk)
> return;
> - }
>
> lock_sock(sk);
> iso_sock_clear_timer(sk);
gemini/gemini-3.1-pro-preview has two comments [1].
Kind regards,
Paul
[1]:
https://sashiko.dev/#/patchset/20260626115312.33528-1-vulab%40iscas.ac.cn
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] fix: net/bluetooth: iso_conn_del: extra iso_conn_put on iso_sock_hold failure path
2026-06-26 11:53 [PATCH] fix: net/bluetooth: iso_conn_del: extra iso_conn_put on iso_sock_hold failure path WenTao Liang
2026-06-26 13:12 ` Paul Menzel
@ 2026-06-28 3:54 ` WenTao Liang
1 sibling, 0 replies; 3+ messages in thread
From: WenTao Liang @ 2026-06-28 3:54 UTC (permalink / raw)
To: marcel, luiz.dentz; +Cc: linux-bluetooth, linux-kernel, stable
> 2026年6月26日 19:53,WenTao Liang <vulab@iscas.ac.cn> 写道:
>
> In iso_conn_del(), iso_conn_hold_unless_zero() acquires a temporary
> reference which is correctly balanced by iso_conn_put() at line 279. When
> iso_sock_hold() returns NULL (sk == NULL), an additional
> iso_conn_put(conn) is called, dropping hcon's reference to conn too
> early. The caller (e.g., hci_conn_del) will later also iso_conn_put(),
> causing a double-free or use-after-free.
>
> Remove the extra iso_conn_put(conn) on the sk == NULL path.
>
> Cc: stable@vger.kernel.org
> Fixes: dc26097bdb86 ("Bluetooth: ISO: Use kref to track lifetime of iso_conn")
> Signed-off-by: WenTao Liang <vulab@iscas.ac.cn>
> ---
> net/bluetooth/iso.c | 4 +---
> 1 file changed, 1 insertion(+), 3 deletions(-)
>
> diff --git a/net/bluetooth/iso.c b/net/bluetooth/iso.c
> index 3abd8111dda8..99755671e469 100644
> --- a/net/bluetooth/iso.c
> +++ b/net/bluetooth/iso.c
> @@ -278,10 +278,8 @@ static void iso_conn_del(struct hci_conn *hcon, int err)
> iso_conn_unlock(conn);
> iso_conn_put(conn);
>
> - if (!sk) {
> - iso_conn_put(conn);
> + if (!sk)
> return;
> - }
>
> lock_sock(sk);
> iso_sock_clear_timer(sk);
> --
> 2.39.5 (Apple Git-154)
Please ignore this patch. I will resend a proper version after
learning the kernel submission process.
Apologies for the noise.
Best regards,
WenTao Liang
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-06-28 3:55 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-06-26 11:53 [PATCH] fix: net/bluetooth: iso_conn_del: extra iso_conn_put on iso_sock_hold failure path WenTao Liang
2026-06-26 13:12 ` Paul Menzel
2026-06-28 3:54 ` WenTao Liang
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®