public inbox for stable@vger.kernel.org
 help / color / mirror / Atom feed
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	patches@lists.linux.dev,
	syzbot+10bd8fe6741eedd2be2e@syzkaller.appspotmail.com,
	Luiz Augusto von Dentz <luiz.von.dentz@intel.com>,
	Dan Carpenter <dan.carpenter@linaro.org>
Subject: [PATCH 6.12 228/231] Bluetooth: L2CAP: Fix corrupted list in hci_chan_del
Date: Wed, 19 Mar 2025 07:32:01 -0700	[thread overview]
Message-ID: <20250319143032.472723660@linuxfoundation.org> (raw)
In-Reply-To: <20250319143026.865956961@linuxfoundation.org>

6.12-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

commit ab4eedb790cae44313759b50fe47da285e2519d5 upstream.

This fixes the following trace by reworking the locking of l2cap_conn
so instead of only locking when changing the chan_l list this promotes
chan_lock to a general lock of l2cap_conn so whenever it is being held
it would prevents the likes of l2cap_conn_del to run:

list_del corruption, ffff888021297e00->prev is LIST_POISON2 (dead000000000122)
------------[ cut here ]------------
kernel BUG at lib/list_debug.c:61!
Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI
CPU: 1 UID: 0 PID: 5896 Comm: syz-executor213 Not tainted 6.14.0-rc1-next-20250204-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 12/27/2024
RIP: 0010:__list_del_entry_valid_or_report+0x12c/0x190 lib/list_debug.c:59
Code: 8c 4c 89 fe 48 89 da e8 32 8c 37 fc 90 0f 0b 48 89 df e8 27 9f 14 fd 48 c7 c7 a0 c0 60 8c 4c 89 fe 48 89 da e8 15 8c 37 fc 90 <0f> 0b 4c 89 e7 e8 0a 9f 14 fd 42 80 3c 2b 00 74 08 4c 89 e7 e8 cb
RSP: 0018:ffffc90003f6f998 EFLAGS: 00010246
RAX: 000000000000004e RBX: dead000000000122 RCX: 01454d423f7fbf00
RDX: 0000000000000000 RSI: 0000000080000000 RDI: 0000000000000000
RBP: dffffc0000000000 R08: ffffffff819f077c R09: 1ffff920007eded0
R10: dffffc0000000000 R11: fffff520007eded1 R12: dead000000000122
R13: dffffc0000000000 R14: ffff8880352248d8 R15: ffff888021297e00
FS:  00007f7ace6686c0(0000) GS:ffff8880b8700000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f7aceeeb1d0 CR3: 000000003527c000 CR4: 00000000003526f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
 <TASK>
 __list_del_entry_valid include/linux/list.h:124 [inline]
 __list_del_entry include/linux/list.h:215 [inline]
 list_del_rcu include/linux/rculist.h:168 [inline]
 hci_chan_del+0x70/0x1b0 net/bluetooth/hci_conn.c:2858
 l2cap_conn_free net/bluetooth/l2cap_core.c:1816 [inline]
 kref_put include/linux/kref.h:65 [inline]
 l2cap_conn_put+0x70/0xe0 net/bluetooth/l2cap_core.c:1830
 l2cap_sock_shutdown+0xa8a/0x1020 net/bluetooth/l2cap_sock.c:1377
 l2cap_sock_release+0x79/0x1d0 net/bluetooth/l2cap_sock.c:1416
 __sock_release net/socket.c:642 [inline]
 sock_close+0xbc/0x240 net/socket.c:1393
 __fput+0x3e9/0x9f0 fs/file_table.c:448
 task_work_run+0x24f/0x310 kernel/task_work.c:227
 ptrace_notify+0x2d2/0x380 kernel/signal.c:2522
 ptrace_report_syscall include/linux/ptrace.h:415 [inline]
 ptrace_report_syscall_exit include/linux/ptrace.h:477 [inline]
 syscall_exit_work+0xc7/0x1d0 kernel/entry/common.c:173
 syscall_exit_to_user_mode_prepare kernel/entry/common.c:200 [inline]
 __syscall_exit_to_user_mode_work kernel/entry/common.c:205 [inline]
 syscall_exit_to_user_mode+0x24a/0x340 kernel/entry/common.c:218
 do_syscall_64+0x100/0x230 arch/x86/entry/common.c:89
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f7aceeaf449
Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 41 19 00 00 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f7ace668218 EFLAGS: 00000246 ORIG_RAX: 000000000000002a
RAX: fffffffffffffffc RBX: 00007f7acef39328 RCX: 00007f7aceeaf449
RDX: 000000000000000e RSI: 0000000020000100 RDI: 0000000000000004
RBP: 00007f7acef39320 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000003
R13: 0000000000000004 R14: 00007f7ace668670 R15: 000000000000000b
 </TASK>
Modules linked in:
---[ end trace 0000000000000000 ]---
RIP: 0010:__list_del_entry_valid_or_report+0x12c/0x190 lib/list_debug.c:59
Code: 8c 4c 89 fe 48 89 da e8 32 8c 37 fc 90 0f 0b 48 89 df e8 27 9f 14 fd 48 c7 c7 a0 c0 60 8c 4c 89 fe 48 89 da e8 15 8c 37 fc 90 <0f> 0b 4c 89 e7 e8 0a 9f 14 fd 42 80 3c 2b 00 74 08 4c 89 e7 e8 cb
RSP: 0018:ffffc90003f6f998 EFLAGS: 00010246
RAX: 000000000000004e RBX: dead000000000122 RCX: 01454d423f7fbf00
RDX: 0000000000000000 RSI: 0000000080000000 RDI: 0000000000000000
RBP: dffffc0000000000 R08: ffffffff819f077c R09: 1ffff920007eded0
R10: dffffc0000000000 R11: fffff520007eded1 R12: dead000000000122
R13: dffffc0000000000 R14: ffff8880352248d8 R15: ffff888021297e00
FS:  00007f7ace6686c0(0000) GS:ffff8880b8600000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f7acef05b08 CR3: 000000003527c000 CR4: 00000000003526f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400

Reported-by: syzbot+10bd8fe6741eedd2be2e@syzkaller.appspotmail.com
Tested-by: syzbot+10bd8fe6741eedd2be2e@syzkaller.appspotmail.com
Fixes: b4f82f9ed43a ("Bluetooth: L2CAP: Fix slab-use-after-free Read in l2cap_send_cmd")
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 include/net/bluetooth/l2cap.h |    3 
 net/bluetooth/l2cap_core.c    |  138 ++++++++++++++----------------------------
 net/bluetooth/l2cap_sock.c    |   15 ++--
 3 files changed, 58 insertions(+), 98 deletions(-)

--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -668,7 +668,7 @@ struct l2cap_conn {
 	struct l2cap_chan	*smp;
 
 	struct list_head	chan_l;
-	struct mutex		chan_lock;
+	struct mutex		lock;
 	struct kref		ref;
 	struct list_head	users;
 };
@@ -970,6 +970,7 @@ void l2cap_chan_del(struct l2cap_chan *c
 void l2cap_send_conn_req(struct l2cap_chan *chan);
 
 struct l2cap_conn *l2cap_conn_get(struct l2cap_conn *conn);
+struct l2cap_conn *l2cap_conn_hold_unless_zero(struct l2cap_conn *conn);
 void l2cap_conn_put(struct l2cap_conn *conn);
 
 int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user);
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -119,7 +119,6 @@ static struct l2cap_chan *l2cap_get_chan
 {
 	struct l2cap_chan *c;
 
-	mutex_lock(&conn->chan_lock);
 	c = __l2cap_get_chan_by_scid(conn, cid);
 	if (c) {
 		/* Only lock if chan reference is not 0 */
@@ -127,7 +126,6 @@ static struct l2cap_chan *l2cap_get_chan
 		if (c)
 			l2cap_chan_lock(c);
 	}
-	mutex_unlock(&conn->chan_lock);
 
 	return c;
 }
@@ -140,7 +138,6 @@ static struct l2cap_chan *l2cap_get_chan
 {
 	struct l2cap_chan *c;
 
-	mutex_lock(&conn->chan_lock);
 	c = __l2cap_get_chan_by_dcid(conn, cid);
 	if (c) {
 		/* Only lock if chan reference is not 0 */
@@ -148,7 +145,6 @@ static struct l2cap_chan *l2cap_get_chan
 		if (c)
 			l2cap_chan_lock(c);
 	}
-	mutex_unlock(&conn->chan_lock);
 
 	return c;
 }
@@ -418,7 +414,7 @@ static void l2cap_chan_timeout(struct wo
 	if (!conn)
 		return;
 
-	mutex_lock(&conn->chan_lock);
+	mutex_lock(&conn->lock);
 	/* __set_chan_timer() calls l2cap_chan_hold(chan) while scheduling
 	 * this work. No need to call l2cap_chan_hold(chan) here again.
 	 */
@@ -439,7 +435,7 @@ static void l2cap_chan_timeout(struct wo
 	l2cap_chan_unlock(chan);
 	l2cap_chan_put(chan);
 
-	mutex_unlock(&conn->chan_lock);
+	mutex_unlock(&conn->lock);
 }
 
 struct l2cap_chan *l2cap_chan_create(void)
@@ -642,9 +638,9 @@ void __l2cap_chan_add(struct l2cap_conn
 
 void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
 {
-	mutex_lock(&conn->chan_lock);
+	mutex_lock(&conn->lock);
 	__l2cap_chan_add(conn, chan);
-	mutex_unlock(&conn->chan_lock);
+	mutex_unlock(&conn->lock);
 }
 
 void l2cap_chan_del(struct l2cap_chan *chan, int err)
@@ -732,9 +728,9 @@ void l2cap_chan_list(struct l2cap_conn *
 	if (!conn)
 		return;
 
-	mutex_lock(&conn->chan_lock);
+	mutex_lock(&conn->lock);
 	__l2cap_chan_list(conn, func, data);
-	mutex_unlock(&conn->chan_lock);
+	mutex_unlock(&conn->lock);
 }
 
 EXPORT_SYMBOL_GPL(l2cap_chan_list);
@@ -746,7 +742,7 @@ static void l2cap_conn_update_id_addr(st
 	struct hci_conn *hcon = conn->hcon;
 	struct l2cap_chan *chan;
 
-	mutex_lock(&conn->chan_lock);
+	mutex_lock(&conn->lock);
 
 	list_for_each_entry(chan, &conn->chan_l, list) {
 		l2cap_chan_lock(chan);
@@ -755,7 +751,7 @@ static void l2cap_conn_update_id_addr(st
 		l2cap_chan_unlock(chan);
 	}
 
-	mutex_unlock(&conn->chan_lock);
+	mutex_unlock(&conn->lock);
 }
 
 static void l2cap_chan_le_connect_reject(struct l2cap_chan *chan)
@@ -1508,8 +1504,6 @@ static void l2cap_conn_start(struct l2ca
 
 	BT_DBG("conn %p", conn);
 
-	mutex_lock(&conn->chan_lock);
-
 	list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
 		l2cap_chan_lock(chan);
 
@@ -1578,8 +1572,6 @@ static void l2cap_conn_start(struct l2ca
 
 		l2cap_chan_unlock(chan);
 	}
-
-	mutex_unlock(&conn->chan_lock);
 }
 
 static void l2cap_le_conn_ready(struct l2cap_conn *conn)
@@ -1625,7 +1617,7 @@ static void l2cap_conn_ready(struct l2ca
 	if (hcon->type == ACL_LINK)
 		l2cap_request_info(conn);
 
-	mutex_lock(&conn->chan_lock);
+	mutex_lock(&conn->lock);
 
 	list_for_each_entry(chan, &conn->chan_l, list) {
 
@@ -1643,7 +1635,7 @@ static void l2cap_conn_ready(struct l2ca
 		l2cap_chan_unlock(chan);
 	}
 
-	mutex_unlock(&conn->chan_lock);
+	mutex_unlock(&conn->lock);
 
 	if (hcon->type == LE_LINK)
 		l2cap_le_conn_ready(conn);
@@ -1658,14 +1650,10 @@ static void l2cap_conn_unreliable(struct
 
 	BT_DBG("conn %p", conn);
 
-	mutex_lock(&conn->chan_lock);
-
 	list_for_each_entry(chan, &conn->chan_l, list) {
 		if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
 			l2cap_chan_set_err(chan, err);
 	}
-
-	mutex_unlock(&conn->chan_lock);
 }
 
 static void l2cap_info_timeout(struct work_struct *work)
@@ -1676,7 +1664,9 @@ static void l2cap_info_timeout(struct wo
 	conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
 	conn->info_ident = 0;
 
+	mutex_lock(&conn->lock);
 	l2cap_conn_start(conn);
+	mutex_unlock(&conn->lock);
 }
 
 /*
@@ -1768,6 +1758,8 @@ static void l2cap_conn_del(struct hci_co
 
 	BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
 
+	mutex_lock(&conn->lock);
+
 	kfree_skb(conn->rx_skb);
 
 	skb_queue_purge(&conn->pending_rx);
@@ -1786,8 +1778,6 @@ static void l2cap_conn_del(struct hci_co
 	/* Force the connection to be immediately dropped */
 	hcon->disc_timeout = 0;
 
-	mutex_lock(&conn->chan_lock);
-
 	/* Kill channels */
 	list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
 		l2cap_chan_hold(chan);
@@ -1801,12 +1791,14 @@ static void l2cap_conn_del(struct hci_co
 		l2cap_chan_put(chan);
 	}
 
-	mutex_unlock(&conn->chan_lock);
-
 	if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
 		cancel_delayed_work_sync(&conn->info_timer);
 
+	hci_chan_del(conn->hchan);
+	conn->hchan = NULL;
+
 	hcon->l2cap_data = NULL;
+	mutex_unlock(&conn->lock);
 	l2cap_conn_put(conn);
 }
 
@@ -1814,7 +1806,6 @@ static void l2cap_conn_free(struct kref
 {
 	struct l2cap_conn *conn = container_of(ref, struct l2cap_conn, ref);
 
-	hci_chan_del(conn->hchan);
 	hci_conn_put(conn->hcon);
 	kfree(conn);
 }
@@ -2925,8 +2916,6 @@ static void l2cap_raw_recv(struct l2cap_
 
 	BT_DBG("conn %p", conn);
 
-	mutex_lock(&conn->chan_lock);
-
 	list_for_each_entry(chan, &conn->chan_l, list) {
 		if (chan->chan_type != L2CAP_CHAN_RAW)
 			continue;
@@ -2941,8 +2930,6 @@ static void l2cap_raw_recv(struct l2cap_
 		if (chan->ops->recv(chan, nskb))
 			kfree_skb(nskb);
 	}
-
-	mutex_unlock(&conn->chan_lock);
 }
 
 /* ---- L2CAP signalling commands ---- */
@@ -3965,7 +3952,6 @@ static void l2cap_connect(struct l2cap_c
 		goto response;
 	}
 
-	mutex_lock(&conn->chan_lock);
 	l2cap_chan_lock(pchan);
 
 	/* Check if the ACL is secure enough (if not SDP) */
@@ -4072,7 +4058,6 @@ response:
 	}
 
 	l2cap_chan_unlock(pchan);
-	mutex_unlock(&conn->chan_lock);
 	l2cap_chan_put(pchan);
 }
 
@@ -4111,27 +4096,19 @@ static int l2cap_connect_create_rsp(stru
 	BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
 	       dcid, scid, result, status);
 
-	mutex_lock(&conn->chan_lock);
-
 	if (scid) {
 		chan = __l2cap_get_chan_by_scid(conn, scid);
-		if (!chan) {
-			err = -EBADSLT;
-			goto unlock;
-		}
+		if (!chan)
+			return -EBADSLT;
 	} else {
 		chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
-		if (!chan) {
-			err = -EBADSLT;
-			goto unlock;
-		}
+		if (!chan)
+			return -EBADSLT;
 	}
 
 	chan = l2cap_chan_hold_unless_zero(chan);
-	if (!chan) {
-		err = -EBADSLT;
-		goto unlock;
-	}
+	if (!chan)
+		return -EBADSLT;
 
 	err = 0;
 
@@ -4169,9 +4146,6 @@ static int l2cap_connect_create_rsp(stru
 	l2cap_chan_unlock(chan);
 	l2cap_chan_put(chan);
 
-unlock:
-	mutex_unlock(&conn->chan_lock);
-
 	return err;
 }
 
@@ -4459,11 +4433,7 @@ static inline int l2cap_disconnect_req(s
 
 	chan->ops->set_shutdown(chan);
 
-	l2cap_chan_unlock(chan);
-	mutex_lock(&conn->chan_lock);
-	l2cap_chan_lock(chan);
 	l2cap_chan_del(chan, ECONNRESET);
-	mutex_unlock(&conn->chan_lock);
 
 	chan->ops->close(chan);
 
@@ -4500,11 +4470,7 @@ static inline int l2cap_disconnect_rsp(s
 		return 0;
 	}
 
-	l2cap_chan_unlock(chan);
-	mutex_lock(&conn->chan_lock);
-	l2cap_chan_lock(chan);
 	l2cap_chan_del(chan, 0);
-	mutex_unlock(&conn->chan_lock);
 
 	chan->ops->close(chan);
 
@@ -4702,13 +4668,9 @@ static int l2cap_le_connect_rsp(struct l
 	BT_DBG("dcid 0x%4.4x mtu %u mps %u credits %u result 0x%2.2x",
 	       dcid, mtu, mps, credits, result);
 
-	mutex_lock(&conn->chan_lock);
-
 	chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
-	if (!chan) {
-		err = -EBADSLT;
-		goto unlock;
-	}
+	if (!chan)
+		return -EBADSLT;
 
 	err = 0;
 
@@ -4756,9 +4718,6 @@ static int l2cap_le_connect_rsp(struct l
 
 	l2cap_chan_unlock(chan);
 
-unlock:
-	mutex_unlock(&conn->chan_lock);
-
 	return err;
 }
 
@@ -4870,7 +4829,6 @@ static int l2cap_le_connect_req(struct l
 		goto response;
 	}
 
-	mutex_lock(&conn->chan_lock);
 	l2cap_chan_lock(pchan);
 
 	if (!smp_sufficient_security(conn->hcon, pchan->sec_level,
@@ -4936,7 +4894,6 @@ static int l2cap_le_connect_req(struct l
 
 response_unlock:
 	l2cap_chan_unlock(pchan);
-	mutex_unlock(&conn->chan_lock);
 	l2cap_chan_put(pchan);
 
 	if (result == L2CAP_CR_PEND)
@@ -5070,7 +5027,6 @@ static inline int l2cap_ecred_conn_req(s
 		goto response;
 	}
 
-	mutex_lock(&conn->chan_lock);
 	l2cap_chan_lock(pchan);
 
 	if (!smp_sufficient_security(conn->hcon, pchan->sec_level,
@@ -5145,7 +5101,6 @@ static inline int l2cap_ecred_conn_req(s
 
 unlock:
 	l2cap_chan_unlock(pchan);
-	mutex_unlock(&conn->chan_lock);
 	l2cap_chan_put(pchan);
 
 response:
@@ -5182,8 +5137,6 @@ static inline int l2cap_ecred_conn_rsp(s
 	BT_DBG("mtu %u mps %u credits %u result 0x%4.4x", mtu, mps, credits,
 	       result);
 
-	mutex_lock(&conn->chan_lock);
-
 	cmd_len -= sizeof(*rsp);
 
 	list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
@@ -5269,8 +5222,6 @@ static inline int l2cap_ecred_conn_rsp(s
 		l2cap_chan_unlock(chan);
 	}
 
-	mutex_unlock(&conn->chan_lock);
-
 	return err;
 }
 
@@ -5383,8 +5334,6 @@ static inline int l2cap_le_command_rej(s
 	if (cmd_len < sizeof(*rej))
 		return -EPROTO;
 
-	mutex_lock(&conn->chan_lock);
-
 	chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
 	if (!chan)
 		goto done;
@@ -5399,7 +5348,6 @@ static inline int l2cap_le_command_rej(s
 	l2cap_chan_put(chan);
 
 done:
-	mutex_unlock(&conn->chan_lock);
 	return 0;
 }
 
@@ -6854,8 +6802,12 @@ static void process_pending_rx(struct wo
 
 	BT_DBG("");
 
+	mutex_lock(&conn->lock);
+
 	while ((skb = skb_dequeue(&conn->pending_rx)))
 		l2cap_recv_frame(conn, skb);
+
+	mutex_unlock(&conn->lock);
 }
 
 static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
@@ -6894,7 +6846,7 @@ static struct l2cap_conn *l2cap_conn_add
 		conn->local_fixed_chan |= L2CAP_FC_SMP_BREDR;
 
 	mutex_init(&conn->ident_lock);
-	mutex_init(&conn->chan_lock);
+	mutex_init(&conn->lock);
 
 	INIT_LIST_HEAD(&conn->chan_l);
 	INIT_LIST_HEAD(&conn->users);
@@ -7085,7 +7037,7 @@ int l2cap_chan_connect(struct l2cap_chan
 		}
 	}
 
-	mutex_lock(&conn->chan_lock);
+	mutex_lock(&conn->lock);
 	l2cap_chan_lock(chan);
 
 	if (cid && __l2cap_get_chan_by_dcid(conn, cid)) {
@@ -7126,7 +7078,7 @@ int l2cap_chan_connect(struct l2cap_chan
 
 chan_unlock:
 	l2cap_chan_unlock(chan);
-	mutex_unlock(&conn->chan_lock);
+	mutex_unlock(&conn->lock);
 done:
 	hci_dev_unlock(hdev);
 	hci_dev_put(hdev);
@@ -7339,7 +7291,7 @@ static void l2cap_security_cfm(struct hc
 
 	BT_DBG("conn %p status 0x%2.2x encrypt %u", conn, status, encrypt);
 
-	mutex_lock(&conn->chan_lock);
+	mutex_lock(&conn->lock);
 
 	list_for_each_entry(chan, &conn->chan_l, list) {
 		l2cap_chan_lock(chan);
@@ -7413,7 +7365,7 @@ static void l2cap_security_cfm(struct hc
 		l2cap_chan_unlock(chan);
 	}
 
-	mutex_unlock(&conn->chan_lock);
+	mutex_unlock(&conn->lock);
 }
 
 /* Append fragment into frame respecting the maximum len of rx_skb */
@@ -7480,8 +7432,11 @@ static void l2cap_recv_reset(struct l2ca
 	conn->rx_len = 0;
 }
 
-static struct l2cap_conn *l2cap_conn_hold_unless_zero(struct l2cap_conn *c)
+struct l2cap_conn *l2cap_conn_hold_unless_zero(struct l2cap_conn *c)
 {
+	if (!c)
+		return NULL;
+
 	BT_DBG("conn %p orig refcnt %u", c, kref_read(&c->ref));
 
 	if (!kref_get_unless_zero(&c->ref))
@@ -7507,11 +7462,15 @@ void l2cap_recv_acldata(struct hci_conn
 
 	hci_dev_unlock(hcon->hdev);
 
-	if (!conn)
-		goto drop;
+	if (!conn) {
+		kfree_skb(skb);
+		return;
+	}
 
 	BT_DBG("conn %p len %u flags 0x%x", conn, skb->len, flags);
 
+	mutex_lock(&conn->lock);
+
 	switch (flags) {
 	case ACL_START:
 	case ACL_START_NO_FLUSH:
@@ -7536,7 +7495,7 @@ void l2cap_recv_acldata(struct hci_conn
 		if (len == skb->len) {
 			/* Complete frame received */
 			l2cap_recv_frame(conn, skb);
-			return;
+			goto unlock;
 		}
 
 		BT_DBG("Start: total len %d, frag len %u", len, skb->len);
@@ -7598,10 +7557,11 @@ void l2cap_recv_acldata(struct hci_conn
 		break;
 	}
 
-	l2cap_conn_put(conn);
-
 drop:
 	kfree_skb(skb);
+unlock:
+	mutex_unlock(&conn->lock);
+	l2cap_conn_put(conn);
 }
 
 static struct hci_cb l2cap_cb = {
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -1326,9 +1326,10 @@ static int l2cap_sock_shutdown(struct so
 	/* prevent sk structure from being freed whilst unlocked */
 	sock_hold(sk);
 
-	chan = l2cap_pi(sk)->chan;
 	/* prevent chan structure from being freed whilst unlocked */
-	l2cap_chan_hold(chan);
+	chan = l2cap_chan_hold_unless_zero(l2cap_pi(sk)->chan);
+	if (!chan)
+		goto shutdown_already;
 
 	BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
 
@@ -1358,22 +1359,20 @@ static int l2cap_sock_shutdown(struct so
 	release_sock(sk);
 
 	l2cap_chan_lock(chan);
-	conn = chan->conn;
-	if (conn)
-		/* prevent conn structure from being freed */
-		l2cap_conn_get(conn);
+	/* prevent conn structure from being freed */
+	conn = l2cap_conn_hold_unless_zero(chan->conn);
 	l2cap_chan_unlock(chan);
 
 	if (conn)
 		/* mutex lock must be taken before l2cap_chan_lock() */
-		mutex_lock(&conn->chan_lock);
+		mutex_lock(&conn->lock);
 
 	l2cap_chan_lock(chan);
 	l2cap_chan_close(chan, 0);
 	l2cap_chan_unlock(chan);
 
 	if (conn) {
-		mutex_unlock(&conn->chan_lock);
+		mutex_unlock(&conn->lock);
 		l2cap_conn_put(conn);
 	}
 



  parent reply	other threads:[~2025-03-19 14:39 UTC|newest]

Thread overview: 243+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-19 14:28 [PATCH 6.12 000/231] 6.12.20-rc1 review Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 001/231] mm/slab/kvfree_rcu: Switch to WQ_MEM_RECLAIM wq Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 002/231] mm: fix kernel BUG when userfaultfd_move encounters swapcache Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 003/231] userfaultfd: fix PTE unmapping stack-allocated PTE copies Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 004/231] fbdev: hyperv_fb: iounmap() the correct memory when removing a device Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 005/231] pinctrl: bcm281xx: Fix incorrect regmap max_registers value Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 006/231] pinctrl: nuvoton: npcm8xx: Add NULL check in npcm8xx_gpio_fw Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 007/231] netfilter: nft_ct: Use __refcount_inc() for per-CPU nft_ct_pcpu_template Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 008/231] ice: do not configure destination override for switchdev Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 009/231] ice: fix memory leak in aRFS after reset Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 010/231] ice: Fix switchdev slow-path in LAG Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 011/231] netfilter: nf_conncount: garbage collection is not skipped when jiffies wrap around Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 012/231] netfilter: nf_tables: make destruction work queue pernet Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 013/231] sched: address a potential NULL pointer dereference in the GRED scheduler Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 014/231] wifi: iwlwifi: mvm: fix PNVM timeout for non-MSI-X platforms Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 015/231] wifi: mac80211: dont queue sdata::work for a non-running sdata Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 016/231] wifi: cfg80211: cancel wiphy_work before freeing wiphy Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 017/231] Bluetooth: hci_event: Fix enabling passive scanning Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 018/231] Revert "Bluetooth: hci_core: Fix sleeping function called from invalid context" Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 019/231] net/mlx5: Fill out devlink dev info only for PFs Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 020/231] net: dsa: mv88e6xxx: Verify after ATU Load ops Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 021/231] net: mctp i3c: Copy headers if cloned Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 022/231] net: mctp i2c: " Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 023/231] netpoll: hold rcu read lock in __netpoll_send_skb() Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 024/231] drm/hyperv: Fix address space leak when Hyper-V DRM device is removed Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 025/231] fbdev: hyperv_fb: Fix hang in kdump kernel when on Hyper-V Gen 2 VMs Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 026/231] fbdev: hyperv_fb: Simplify hvfb_putmem Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 027/231] fbdev: hyperv_fb: Allow graceful removal of framebuffer Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 028/231] Drivers: hv: vmbus: Dont release fb_mmio resource in vmbus_free_mmio() Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 029/231] net/mlx5: handle errors in mlx5_chains_create_table() Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 030/231] eth: bnxt: fix truesize for mb-xdp-pass case Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 031/231] eth: bnxt: return fail if interface is down in bnxt_queue_mem_alloc() Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 032/231] eth: bnxt: do not use BNXT_VNIC_NTUPLE unconditionally in queue restart logic Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 033/231] eth: bnxt: do not update checksum in bnxt_xdp_build_skb() Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 034/231] eth: bnxt: fix kernel panic in the bnxt_get_queue_stats{rx | tx} Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 035/231] eth: bnxt: use page pool for head frags Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 036/231] bnxt_en: refactor tpa_info alloc/free into helpers Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 037/231] bnxt_en: handle tpa_info in queue API implementation Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 038/231] eth: bnxt: fix memory leak in queue reset Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 039/231] net: switchdev: Convert blocking notification chain to a raw one Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 040/231] net: mctp: unshare packets when reassembling Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 041/231] bonding: fix incorrect MAC address setting to receive NS messages Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 042/231] selftests: bonding: fix incorrect mac address Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 043/231] rtase: Fix improper release of ring list entries in rtase_sw_reset Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 044/231] netfilter: nf_conncount: Fully initialize struct nf_conncount_tuple in insert_tree() Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 045/231] ipvs: prevent integer overflow in do_ip_vs_get_ctl() Greg Kroah-Hartman
2025-03-19 14:28 ` [PATCH 6.12 046/231] net_sched: Prevent creation of classes with TC_H_ROOT Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 047/231] netfilter: nft_exthdr: fix offset with ipv4_find_option() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 048/231] gre: Fix IPv6 link-local address generation Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 049/231] net: openvswitch: remove misbehaving actions length check Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 050/231] Revert "openvswitch: switch to per-action label counting in conntrack" Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 051/231] net/mlx5: HWS, Rightsize bwc matcher priority Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 052/231] net/mlx5: Fix incorrect IRQ pool usage when releasing IRQs Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 053/231] net/mlx5: Lag, Check shared fdb before creating MultiPort E-Switch Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 054/231] net/mlx5: Bridge, fix the crash caused by LAG state check Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 055/231] net/mlx5e: Prevent bridge link show failure for non-eswitch-allowed devices Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 056/231] nvme-fc: go straight to connecting state when initializing Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 057/231] nvme-fc: do not ignore connectivity loss during connecting Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 058/231] hrtimers: Mark is_migration_base() with __always_inline Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 059/231] powercap: call put_device() on an error path in powercap_register_control_type() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 060/231] btrfs: avoid starting new transaction when cleaning qgroup during subvolume drop Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 061/231] futex: Pass in task to futex_queue() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 062/231] iscsi_ibft: Fix UBSAN shift-out-of-bounds warning in ibft_attr_show_nic() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 063/231] sched/debug: Provide slice length for fair tasks Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 064/231] platform/x86/intel: pmc: fix ltr decode in pmc_core_ltr_show() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 065/231] drm/amd/display: Fix out-of-bound accesses Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 066/231] scsi: core: Use GFP_NOIO to avoid circular locking dependency Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 067/231] scsi: ufs: core: Fix error return with query response Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 068/231] scsi: qla1280: Fix kernel oops when debug level > 2 Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 069/231] ACPI: resource: IRQ override for Eluktronics MECH-17 Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 070/231] smb: client: fix noisy when tree connecting to DFS interlink targets Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 071/231] alpha/elf: Fix misc/setarch test of util-linux by removing 32bit support Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 072/231] vboxsf: fix building with GCC 15 Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 073/231] selftests: always check mask returned by statmount(2) Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 074/231] sched_ext: selftests/dsp_local_on: Fix sporadic failures Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 075/231] HID: intel-ish-hid: fix the length of MNG_SYNC_FW_CLOCK in doorbell Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 076/231] HID: intel-ish-hid: Send clock sync message immediately after reset Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 077/231] HID: ignore non-functional sensor in HP 5MP Camera Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 078/231] HID: hid-steam: Fix issues with disabling both gamepad mode and lizard mode Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 079/231] usb: phy: generic: Use proper helper for property detection Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 080/231] HID: intel-ish-hid: ipc: Add Panther Lake PCI device IDs Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 081/231] HID: topre: Fix n-key rollover on Realforce R3S TKL boards Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 082/231] selftests/cgroup: use bash in test_cpuset_v1_hp.sh Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 083/231] HID: hid-apple: Apple Magic Keyboard a3203 USB-C support Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 084/231] HID: apple: fix up the F6 key on the Omoton KB066 keyboard Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 085/231] btrfs: fix two misuses of folio_shift() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 086/231] objtool: Ignore dangling jump table entries Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 087/231] sched: Clarify wake_up_q()s write to task->wake_q.next Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 088/231] platform/x86: thinkpad_acpi: Fix invalid fan speed on ThinkPad X120e Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 089/231] platform/x86: thinkpad_acpi: Support for V9 DYTC platform profiles Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 090/231] platform/x86: int3472: Use correct type for "polarity", call it gpio_flags Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 091/231] platform/x86: int3472: Call "reset" GPIO "enable" for INT347E Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 092/231] s390/cio: Fix CHPID "configure" attribute caching Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 093/231] thermal/cpufreq_cooling: Remove structure member documentation Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 094/231] LoongArch: Fix kernel_page_present() for KPRANGE/XKPRANGE Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 095/231] LoongArch: KVM: Set host with kernel mode when switch to VM mode Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 096/231] arm64: amu: Delay allocating cpumask for AMU FIE support Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 097/231] Xen/swiotlb: mark xen_swiotlb_fixup() __init Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 098/231] Bluetooth: L2CAP: Fix slab-use-after-free Read in l2cap_send_cmd Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 099/231] drm/tests: hdmi: Remove redundant assignments Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 100/231] drm/tests: hdmi: Reorder DRM entities variables assignment Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 101/231] drm/tests: hdmi: Fix recursive locking Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 102/231] selftests/bpf: Fix invalid flag of recv() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 103/231] ASoC: Intel: sof_sdw: Add lookup of quirk using PCI subsystem ID Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 104/231] ASoC: Intel: sof_sdw: Add quirk for Asus Zenbook S14 Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 105/231] ASoC: Intel: soc-acpi-intel-mtl-match: declare adr as ull Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.12 106/231] ASoC: simple-card-utils.c: add missing dlc->of_node Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 107/231] ALSA: hda/realtek: Limit mic boost on Positivo ARN50 Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 108/231] ASoC: rsnd: indicate unsupported clock rate Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 109/231] ASoC: rsnd: dont indicate warning on rsnd_kctrl_accept_runtime() Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 110/231] ASoC: rsnd: adjust convert rate limitation Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 111/231] ASoC: arizona/madera: use fsleep() in up/down DAPM event delays Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 112/231] ASoC: SOF: Intel: hda: add softdep pre to snd-hda-codec-hdmi module Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 113/231] PCI: pci_ids: add INTEL_HDA_PTL_H Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 114/231] ALSA: hda: intel-dsp-config: Add PTL-H support Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 115/231] ASoC: SOF: Intel: pci-ptl: Add support for PTL-H Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 116/231] ALSA: hda: hda-intel: add Panther Lake-H support Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 117/231] ASoC: SOF: amd: Add post_fw_run_delay ACP quirk Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 118/231] ASoC: SOF: amd: Handle IPC replies before FW_BOOT_COMPLETE Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 119/231] net: wwan: mhi_wwan_mbim: Silence sequence number glitch errors Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 120/231] io-wq: backoff when retrying worker creation Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 121/231] nvme-pci: quirk Acer FA100 for non-uniqueue identifiers Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 122/231] nvmet-rdma: recheck queue state is LIVE in state lock in recv done Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 123/231] apple-nvme: Release power domains when probe fails Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 124/231] cifs: Treat unhandled directory name surrogate reparse points as mount directory nodes Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 125/231] sctp: Fix undefined behavior in left shift operation Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 126/231] nvme: only allow entering LIVE from CONNECTING state Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 127/231] phy: ti: gmii-sel: Do not use syscon helper to build regmap Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 128/231] ASoC: tas2770: Fix volume scale Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 129/231] ASoC: tas2764: Fix power control mask Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 130/231] ASoC: tas2764: Set the SDOUT polarity correctly Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 131/231] fuse: dont truncate cached, mutated symlink Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 132/231] ASoC: dapm-graph: set fill colour of turned on nodes Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 133/231] ASoC: SOF: Intel: dont check number of sdw links when set dmic_fixup Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 134/231] drm/vkms: Round fixp2int conversion in lerp_u16 Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 135/231] perf/x86/intel: Use better start period for frequency mode Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 136/231] x86/of: Dont use DTB for SMP setup if ACPI is enabled Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 137/231] x86/irq: Define trace events conditionally Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 138/231] perf/x86/rapl: Add support for Intel Arrow Lake U Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 139/231] mptcp: safety check before fallback Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 140/231] drm/nouveau: Do not override forced connector status Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 141/231] net: Handle napi_schedule() calls from non-interrupt Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 142/231] block: fix kmem_cache of name bio-108 already exists Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 143/231] vhost: return task creation error instead of NULL Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 144/231] cifs: Validate content of WSL reparse point buffers Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 145/231] cifs: Throw -EOPNOTSUPP error on unsupported reparse point type from parse_reparse_point() Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 146/231] Input: goodix-berlin - fix vddio regulator references Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 147/231] Input: ads7846 - fix gpiod allocation Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 148/231] Input: iqs7222 - preserve system status register Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 149/231] Input: xpad - add 8BitDo SN30 Pro, Hyperkin X91 and Gamesir G7 SE controllers Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 150/231] Input: xpad - add multiple supported devices Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 151/231] Input: xpad - add support for ZOTAC Gaming Zone Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 152/231] Input: xpad - add support for TECNO Pocket Go Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 153/231] Input: xpad - rename QH controller to Legion Go S Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 154/231] Input: i8042 - swap old quirk combination with new quirk for NHxxRZQ Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 155/231] Input: i8042 - add required quirks for missing old boardnames Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 156/231] Input: i8042 - swap old quirk combination with new quirk for several devices Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 157/231] Input: i8042 - swap old quirk combination with new quirk for more devices Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 158/231] USB: serial: ftdi_sio: add support for Altera USB Blaster 3 Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 159/231] USB: serial: option: add Telit Cinterion FE990B compositions Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 160/231] USB: serial: option: fix Telit Cinterion FE990A name Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 161/231] USB: serial: option: match on interface class for Telit FN990B Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 162/231] rust: lockdep: Remove support for dynamically allocated LockClassKeys Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 163/231] rust: remove leftover mentions of the `alloc` crate Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 164/231] rust: alloc: satisfy POSIX alignment requirement Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 165/231] rust: Disallow BTF generation with Rust + LTO Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.12 166/231] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 167/231] x86/microcode/AMD: Fix out-of-bounds on systems with CPU-less NUMA nodes Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 168/231] spi: microchip-core: prevent RX overflows when transmit size > FIFO size Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 169/231] drm/i915/cdclk: Do cdclk post plane programming later Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 170/231] drm/panic: use `div_ceil` to clean Clippy warning Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 171/231] drm/panic: fix overindented list items in documentation Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 172/231] drm/atomic: Filter out redundant DPMS calls Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 173/231] drm/dp_mst: Fix locking when skipping CSN before topology probing Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 174/231] drm/amdgpu: NULL-check BOs backing store when determining GFX12 PTE flags Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 175/231] drm/amd/amdkfd: Evict all queues even HWS remove queue failed Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 176/231] drm/amdgpu/display: Allow DCC for video formats on GFX12 Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 177/231] drm/amd/display: Disable unneeded hpd interrupts during dm_init Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 178/231] drm/amd/display: fix default brightness Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 179/231] drm/amd/display: fix missing .is_two_pixels_per_container Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 180/231] drm/amd/display: Restore correct backlight brightness after a GPU reset Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 181/231] drm/amd/display: Assign normalized_pix_clk when color depth = 14 Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 182/231] drm/amd/display: Fix slab-use-after-free on hdcp_work Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 183/231] ksmbd: fix use-after-free in ksmbd_free_work_struct Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 184/231] ksmbd: prevent connection release during oplock break notification Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 185/231] clk: samsung: update PLL locktime for PLL142XX used on FSD platform Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 186/231] clk: samsung: gs101: fix synchronous external abort in samsung_clk_save() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 187/231] ASoC: Intel: sof_sdw: Fix unlikely uninitialized variable use in create_sdw_dailinks() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 188/231] ASoC: amd: yc: Support mic on another Lenovo ThinkPad E16 Gen 2 model Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 189/231] netmem: prevent TX of unreadable skbs Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 190/231] dm-flakey: Fix memory corruption in optional corrupt_bio_byte feature Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 191/231] arm64: mm: Populate vmemmap at the page level if not section aligned Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 192/231] Fix mmu notifiers for range-based invalidates Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 193/231] qlcnic: fix memory leak issues in qlcnic_sriov_common.c Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 194/231] smb: client: fix regression with guest option Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 195/231] net: phy: nxp-c45-tja11xx: add TJA112X PHY configuration errata Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 196/231] net: phy: nxp-c45-tja11xx: add TJA112XB SGMII PCS restart errata Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 197/231] sched_ext: Validate prev_cpu in scx_bpf_select_cpu_dfl() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 198/231] ASoC: ops: Consistently treat platform_max as control value Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 199/231] rust: error: add missing newline to pr_warn! calls Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 200/231] drm/gma500: Add NULL check for pci_gfx_root in mid_get_vbt_data() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 201/231] ASoC: cs42l43: Fix maximum ADC Volume Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 202/231] rust: init: add missing newline to pr_info! calls Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 203/231] ASoC: rt722-sdca: add missing readable registers Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 204/231] drm/xe: cancel pending job timer before freeing scheduler Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 205/231] drm/xe: Release guc ids before cancelling work Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 206/231] drm/xe/userptr: Fix an incorrect assert Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 207/231] drm/xe/pm: Temporarily disable D3Cold on BMG Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 208/231] nvme: move error logging from nvme_end_req() to __nvme_end_req() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 209/231] ASoC: codecs: wm0010: Fix error handling path in wm0010_spi_probe() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 210/231] drm/i915: Increase I915_PARAM_MMAP_GTT_VERSION version to indicate support for partial mmaps Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 211/231] scripts: generate_rust_analyzer: add missing macros deps Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 212/231] scripts: generate_rust_analyzer: add missing include_dirs Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 213/231] scripts: generate_rust_analyzer: add uapi crate Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 214/231] block: change blk_mq_add_to_batch() third argument type to bool Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 215/231] cifs: Fix integer overflow while processing acregmax mount option Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 216/231] cifs: Fix integer overflow while processing acdirmax " Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 217/231] cifs: Fix integer overflow while processing actimeo " Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 218/231] cifs: Fix integer overflow while processing closetimeo " Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 219/231] x86/vmware: Parse MP tables for SEV-SNP enabled guests under VMware hypervisors Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 220/231] i2c: ali1535: Fix an error handling path in ali1535_probe() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 221/231] i2c: ali15x3: Fix an error handling path in ali15x3_probe() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 222/231] i2c: sis630: Fix an error handling path in sis630_probe() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 223/231] mm/hugetlb: wait for hugetlb folios to be freed Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 224/231] smb3: add support for IAKerb Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 225/231] smb: client: Fix match_session bug preventing session reuse Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.12 226/231] sched_ext: selftests/dsp_local_on: Fix selftest on UP systems Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.12 227/231] tools/sched_ext: Add helper to check task migration state Greg Kroah-Hartman
2025-03-19 14:32 ` Greg Kroah-Hartman [this message]
2025-03-19 14:32 ` [PATCH 6.12 229/231] nvme-fc: rely on state transitions to handle connectivity loss Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.12 230/231] HID: apple: disable Fn key handling on the Omoton KB066 Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.12 231/231] fs/netfs/read_collect: add to next->prev_donated Greg Kroah-Hartman
2025-03-19 16:56 ` [PATCH 6.12 000/231] 6.12.20-rc1 review SeongJae Park
2025-03-19 19:35 ` Jon Hunter
2025-03-19 22:44 ` Hardik Garg
2025-03-20  9:12 ` Markus Reichelt
2025-03-20 10:22 ` Ron Economos
2025-03-20 11:12 ` Miguel Ojeda
2025-03-20 11:20 ` Naresh Kamboju
2025-03-20 11:34 ` Mark Brown
2025-03-20 18:17 ` Florian Fainelli
2025-03-20 23:10 ` Peter Schneider
2025-03-21  7:14 ` Harshit Mogalapalli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250319143032.472723660@linuxfoundation.org \
    --to=gregkh@linuxfoundation.org \
    --cc=dan.carpenter@linaro.org \
    --cc=luiz.von.dentz@intel.com \
    --cc=patches@lists.linux.dev \
    --cc=stable@vger.kernel.org \
    --cc=syzbot+10bd8fe6741eedd2be2e@syzkaller.appspotmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox