aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
authorSiwei Zhang <oss@fourdim.xyz>2026-05-20 22:30:36 -0400
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>2026-05-27 16:44:01 -0400
commit9dbd84990394c51f5cee1e8871bb5ff8af5ed939 (patch)
treed1fa891eaea2eae104486d6a2e4e10cadfcf0cbe /net
parentbfa9d28960ed677d556bdf097073bc3129686229 (diff)
downloadlinux-next-history-9dbd84990394c51f5cee1e8871bb5ff8af5ed939.tar.gz
Bluetooth: L2CAP: fix chan ref leak in l2cap_chan_timeout() on !conn
__set_chan_timer() takes a l2cap_chan reference via l2cap_chan_hold() before scheduling the delayed work. The normal path in l2cap_chan_timeout() drops this reference with l2cap_chan_put() at the end, but the early return when chan->conn is NULL skips the put, leaking the reference. Add the missing l2cap_chan_put() before the early return. Fixes: adf0398cee86 ("Bluetooth: l2cap: fix null-ptr-deref in l2cap_chan_timeout") Cc: stable@vger.kernel.org Signed-off-by: Siwei Zhang <oss@fourdim.xyz> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Diffstat (limited to 'net')
-rw-r--r--net/bluetooth/l2cap_core.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index fdccd62ccca8f..5668c92b3f58d 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -411,8 +411,10 @@ static void l2cap_chan_timeout(struct work_struct *work)
BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
- if (!conn)
+ if (!conn) {
+ l2cap_chan_put(chan);
return;
+ }
mutex_lock(&conn->lock);
/* __set_chan_timer() calls l2cap_chan_hold(chan) while scheduling