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.6 159/166] Bluetooth: L2CAP: Fix corrupted list in hci_chan_del
Date: Wed, 19 Mar 2025 07:32:10 -0700	[thread overview]
Message-ID: <20250319143024.337092602@linuxfoundation.org> (raw)
In-Reply-To: <20250319143019.983527953@linuxfoundation.org>

6.6-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
@@ -662,7 +662,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;
 };
@@ -968,6 +968,7 @@ void l2cap_logical_cfm(struct l2cap_chan
 void __l2cap_physical_cfm(struct l2cap_chan *chan, int result);
 
 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 ---- */
@@ -3963,7 +3950,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) */
@@ -4070,7 +4056,6 @@ response:
 	}
 
 	l2cap_chan_unlock(pchan);
-	mutex_unlock(&conn->chan_lock);
 	l2cap_chan_put(pchan);
 }
 
@@ -4109,27 +4094,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;
 
@@ -4167,9 +4144,6 @@ static int l2cap_connect_create_rsp(stru
 	l2cap_chan_unlock(chan);
 	l2cap_chan_put(chan);
 
-unlock:
-	mutex_unlock(&conn->chan_lock);
-
 	return err;
 }
 
@@ -4457,11 +4431,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);
 
@@ -4498,11 +4468,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);
 
@@ -4700,13 +4666,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;
 
@@ -4754,9 +4716,6 @@ static int l2cap_le_connect_rsp(struct l
 
 	l2cap_chan_unlock(chan);
 
-unlock:
-	mutex_unlock(&conn->chan_lock);
-
 	return err;
 }
 
@@ -4868,7 +4827,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,
@@ -4934,7 +4892,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)
@@ -5071,7 +5028,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,
@@ -5146,7 +5102,6 @@ static inline int l2cap_ecred_conn_req(s
 
 unlock:
 	l2cap_chan_unlock(pchan);
-	mutex_unlock(&conn->chan_lock);
 	l2cap_chan_put(pchan);
 
 response:
@@ -5183,8 +5138,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) {
@@ -5270,8 +5223,6 @@ static inline int l2cap_ecred_conn_rsp(s
 		l2cap_chan_unlock(chan);
 	}
 
-	mutex_unlock(&conn->chan_lock);
-
 	return err;
 }
 
@@ -5384,8 +5335,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;
@@ -5400,7 +5349,6 @@ static inline int l2cap_le_command_rej(s
 	l2cap_chan_put(chan);
 
 done:
-	mutex_unlock(&conn->chan_lock);
 	return 0;
 }
 
@@ -6855,8 +6803,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)
@@ -6895,7 +6847,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);
@@ -7088,7 +7040,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)) {
@@ -7129,7 +7081,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);
@@ -7345,7 +7297,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);
@@ -7419,7 +7371,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 */
@@ -7486,8 +7438,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))
@@ -7513,11 +7468,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:
@@ -7542,7 +7501,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);
@@ -7604,10 +7563,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
@@ -1323,9 +1323,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));
 
@@ -1355,22 +1356,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:41 UTC|newest]

Thread overview: 181+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-03-19 14:29 [PATCH 6.6 000/166] 6.6.84-rc1 review Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 001/166] clockevents/drivers/i8253: Fix stop sequence for timer 0 Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 002/166] sched/isolation: Prevent boot crash when the boot CPU is nohz_full Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 003/166] zram: fix NULL pointer in comp_algorithm_show() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 004/166] hrtimer: Use and report correct timerslack values for realtime tasks Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 005/166] bpf: Use raw_spinlock_t in ringbuf Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 006/166] tcp: fix races in tcp_abort() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 007/166] tcp: fix forever orphan socket caused by tcp_abort Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 008/166] fbdev: hyperv_fb: iounmap() the correct memory when removing a device Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 009/166] pinctrl: bcm281xx: Fix incorrect regmap max_registers value Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 010/166] netfilter: nft_ct: Use __refcount_inc() for per-CPU nft_ct_pcpu_template Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 011/166] ice: fix memory leak in aRFS after reset Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 012/166] netfilter: nf_conncount: garbage collection is not skipped when jiffies wrap around Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 013/166] sched: address a potential NULL pointer dereference in the GRED scheduler Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 014/166] wifi: cfg80211: cancel wiphy_work before freeing wiphy Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 015/166] Bluetooth: hci_event: Fix enabling passive scanning Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 016/166] Revert "Bluetooth: hci_core: Fix sleeping function called from invalid context" Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 017/166] net/mlx5: Fill out devlink dev info only for PFs Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 018/166] net: dsa: mv88e6xxx: Verify after ATU Load ops Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 019/166] net: mctp i2c: Copy headers if cloned Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 020/166] netpoll: hold rcu read lock in __netpoll_send_skb() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 021/166] drm/hyperv: Fix address space leak when Hyper-V DRM device is removed Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 022/166] Drivers: hv: vmbus: Dont release fb_mmio resource in vmbus_free_mmio() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 023/166] net/mlx5: handle errors in mlx5_chains_create_table() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 024/166] eth: bnxt: do not update checksum in bnxt_xdp_build_skb() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 025/166] net: switchdev: Convert blocking notification chain to a raw one Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 026/166] bonding: fix incorrect MAC address setting to receive NS messages Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 027/166] netfilter: nf_conncount: Fully initialize struct nf_conncount_tuple in insert_tree() Greg Kroah-Hartman
2025-03-19 14:29 ` [PATCH 6.6 028/166] ipvs: prevent integer overflow in do_ip_vs_get_ctl() Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 029/166] net_sched: Prevent creation of classes with TC_H_ROOT Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 030/166] netfilter: nft_exthdr: fix offset with ipv4_find_option() Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 031/166] gre: Fix IPv6 link-local address generation Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 032/166] net: openvswitch: remove misbehaving actions length check Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 033/166] net/mlx5: Lag, Check shared fdb before creating MultiPort E-Switch Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 034/166] net/mlx5: Bridge, fix the crash caused by LAG state check Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 035/166] net/mlx5e: Prevent bridge link show failure for non-eswitch-allowed devices Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 036/166] nvme-fc: go straight to connecting state when initializing Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 037/166] nvme-fc: do not ignore connectivity loss during connecting Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 038/166] hrtimers: Mark is_migration_base() with __always_inline Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 039/166] powercap: call put_device() on an error path in powercap_register_control_type() Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 040/166] iscsi_ibft: Fix UBSAN shift-out-of-bounds warning in ibft_attr_show_nic() Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 041/166] sched/debug: Provide slice length for fair tasks Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 042/166] platform/x86/intel: pmc: fix ltr decode in pmc_core_ltr_show() Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 043/166] scsi: core: Use GFP_NOIO to avoid circular locking dependency Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 044/166] scsi: ufs: core: Fix error return with query response Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 045/166] scsi: qla1280: Fix kernel oops when debug level > 2 Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 046/166] ACPI: resource: IRQ override for Eluktronics MECH-17 Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 047/166] smb: client: fix noisy when tree connecting to DFS interlink targets Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 048/166] alpha/elf: Fix misc/setarch test of util-linux by removing 32bit support Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 049/166] vboxsf: fix building with GCC 15 Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 050/166] HID: intel-ish-hid: fix the length of MNG_SYNC_FW_CLOCK in doorbell Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 051/166] HID: intel-ish-hid: Send clock sync message immediately after reset Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 052/166] HID: ignore non-functional sensor in HP 5MP Camera Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 053/166] usb: phy: generic: Use proper helper for property detection Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 054/166] HID: topre: Fix n-key rollover on Realforce R3S TKL boards Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 055/166] HID: hid-apple: Apple Magic Keyboard a3203 USB-C support Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 056/166] HID: apple: fix up the F6 key on the Omoton KB066 keyboard Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 057/166] objtool: Ignore dangling jump table entries Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 058/166] sched: Clarify wake_up_q()s write to task->wake_q.next Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 059/166] platform/x86: thinkpad_acpi: Fix invalid fan speed on ThinkPad X120e Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 060/166] platform/x86: thinkpad_acpi: Support for V9 DYTC platform profiles Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 061/166] s390/cio: Fix CHPID "configure" attribute caching Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 062/166] thermal/cpufreq_cooling: Remove structure member documentation Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 063/166] Xen/swiotlb: mark xen_swiotlb_fixup() __init Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 064/166] Bluetooth: L2CAP: Fix slab-use-after-free Read in l2cap_send_cmd Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 065/166] selftests/bpf: Fix invalid flag of recv() Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 066/166] ASoC: simple-card-utils.c: add missing dlc->of_node Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 067/166] ALSA: hda/realtek: Limit mic boost on Positivo ARN50 Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 068/166] ASoC: rsnd: indicate unsupported clock rate Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 069/166] ASoC: rsnd: dont indicate warning on rsnd_kctrl_accept_runtime() Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 070/166] ASoC: rsnd: adjust convert rate limitation Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 071/166] ASoC: arizona/madera: use fsleep() in up/down DAPM event delays Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 072/166] ASoC: SOF: Intel: hda: add softdep pre to snd-hda-codec-hdmi module Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 073/166] ASoC: SOF: amd: Handle IPC replies before FW_BOOT_COMPLETE Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 074/166] net: wwan: mhi_wwan_mbim: Silence sequence number glitch errors Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 075/166] io-wq: backoff when retrying worker creation Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 076/166] nvme-pci: quirk Acer FA100 for non-uniqueue identifiers Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 077/166] nvme-tcp: add basic support for the C2HTermReq PDU Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 078/166] nvmet-rdma: recheck queue state is LIVE in state lock in recv done Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 079/166] apple-nvme: Release power domains when probe fails Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 080/166] cifs: Treat unhandled directory name surrogate reparse points as mount directory nodes Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 081/166] sctp: Fix undefined behavior in left shift operation Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 082/166] nvme: only allow entering LIVE from CONNECTING state Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 083/166] ASoC: tas2770: Fix volume scale Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 084/166] ASoC: tas2764: Fix power control mask Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 085/166] ASoC: tas2764: Set the SDOUT polarity correctly Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 086/166] fuse: dont truncate cached, mutated symlink Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 087/166] drm/vkms: Round fixp2int conversion in lerp_u16 Greg Kroah-Hartman
2025-03-19 14:30 ` [PATCH 6.6 088/166] perf/x86/intel: Use better start period for frequency mode Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 089/166] x86/irq: Define trace events conditionally Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 090/166] mptcp: safety check before fallback Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 091/166] drm/nouveau: Do not override forced connector status Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 092/166] net: Handle napi_schedule() calls from non-interrupt Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 093/166] block: fix kmem_cache of name bio-108 already exists Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 094/166] mm: add nommu variant of vm_insert_pages() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 095/166] io_uring: get rid of remap_pfn_range() for mapping rings/sqes Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 096/166] io_uring: dont attempt to mmap larger than what the user asks for Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 097/166] io_uring: fix corner case forgetting to vunmap Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 098/166] io_uring: use vmap() for ring mapping Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 099/166] io_uring: unify io_pin_pages() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 100/166] io_uring/kbuf: vmap pinned buffer ring Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 101/166] io_uring/kbuf: use vm_insert_pages() for mmaped pbuf ring Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 102/166] io_uring: use unpin_user_pages() where appropriate Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 103/166] io_uring: fix error pbuf checking Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 104/166] Input: ads7846 - fix gpiod allocation Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 105/166] Input: iqs7222 - preserve system status register Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 106/166] Input: xpad - add 8BitDo SN30 Pro, Hyperkin X91 and Gamesir G7 SE controllers Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 107/166] Input: xpad - add multiple supported devices Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 108/166] Input: xpad - add support for ZOTAC Gaming Zone Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 109/166] Input: xpad - add support for TECNO Pocket Go Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 110/166] Input: xpad - rename QH controller to Legion Go S Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 111/166] Input: i8042 - swap old quirk combination with new quirk for NHxxRZQ Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 112/166] Input: i8042 - add required quirks for missing old boardnames Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 113/166] Input: i8042 - swap old quirk combination with new quirk for several devices Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 114/166] Input: i8042 - swap old quirk combination with new quirk for more devices Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 115/166] USB: serial: ftdi_sio: add support for Altera USB Blaster 3 Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 116/166] USB: serial: option: add Telit Cinterion FE990B compositions Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 117/166] USB: serial: option: fix Telit Cinterion FE990A name Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 118/166] USB: serial: option: match on interface class for Telit FN990B Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 119/166] x86/microcode/AMD: Fix out-of-bounds on systems with CPU-less NUMA nodes Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 120/166] drm/i915/cdclk: Do cdclk post plane programming later Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 121/166] drm/atomic: Filter out redundant DPMS calls Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 122/166] drm/dp_mst: Fix locking when skipping CSN before topology probing Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 123/166] drm/amd/display: Disable unneeded hpd interrupts during dm_init Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 124/166] drm/amd/display: Restore correct backlight brightness after a GPU reset Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 125/166] drm/amd/display: Assign normalized_pix_clk when color depth = 14 Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 126/166] drm/amd/display: Fix slab-use-after-free on hdcp_work Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 127/166] ksmbd: fix use-after-free in ksmbd_free_work_struct Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 128/166] ksmbd: prevent connection release during oplock break notification Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 129/166] clk: samsung: update PLL locktime for PLL142XX used on FSD platform Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 130/166] ASoC: amd: yc: Support mic on another Lenovo ThinkPad E16 Gen 2 model Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 131/166] dm-flakey: Fix memory corruption in optional corrupt_bio_byte feature Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 132/166] arm64: mm: Populate vmemmap at the page level if not section aligned Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 133/166] qlcnic: fix memory leak issues in qlcnic_sriov_common.c Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 134/166] smb: client: fix regression with guest option Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 135/166] rust: Disallow BTF generation with Rust + LTO Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 136/166] rust: init: fix `Zeroable` implementation for `Option<NonNull<T>>` and `Option<KBox<T>>` Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 137/166] lib/buildid: Handle memfd_secret() files in build_id_parse() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 138/166] mm: split critical region in remap_file_pages() and invoke LSMs in between Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 139/166] ASoC: ops: Consistently treat platform_max as control value Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 140/166] rust: error: add missing newline to pr_warn! calls Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 141/166] drm/gma500: Add NULL check for pci_gfx_root in mid_get_vbt_data() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 142/166] ASoC: cs42l43: Fix maximum ADC Volume Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 143/166] rust: init: add missing newline to pr_info! calls Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 144/166] ASoC: rt722-sdca: add missing readable registers Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 145/166] ASoC: codecs: wm0010: Fix error handling path in wm0010_spi_probe() Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 146/166] scripts: generate_rust_analyzer: add missing macros deps Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 147/166] cifs: Fix integer overflow while processing acregmax mount option Greg Kroah-Hartman
2025-03-19 14:31 ` [PATCH 6.6 148/166] cifs: Fix integer overflow while processing acdirmax " Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 149/166] cifs: Fix integer overflow while processing actimeo " Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 150/166] cifs: Fix integer overflow while processing closetimeo " Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 151/166] cifs: Validate content of WSL reparse point buffers Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 152/166] cifs: Throw -EOPNOTSUPP error on unsupported reparse point type from parse_reparse_point() Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 153/166] i2c: ali1535: Fix an error handling path in ali1535_probe() Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 154/166] i2c: ali15x3: Fix an error handling path in ali15x3_probe() Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 155/166] i2c: sis630: Fix an error handling path in sis630_probe() Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 156/166] stmmac: loongson: Pass correct arg to PCI function Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 157/166] smb3: add support for IAKerb Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 158/166] smb: client: Fix match_session bug preventing session reuse Greg Kroah-Hartman
2025-03-19 14:32 ` Greg Kroah-Hartman [this message]
2025-03-19 14:32 ` [PATCH 6.6 160/166] nvme-fc: rely on state transitions to handle connectivity loss Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 161/166] HID: apple: disable Fn key handling on the Omoton KB066 Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 162/166] nvme-tcp: Fix a C2HTermReq error message Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 163/166] rust: lockdep: Remove support for dynamically allocated LockClassKeys Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 164/166] netfilter: nf_tables: use timestamp to check for set element timeout Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 165/166] netfilter: nf_tables: bail out if stateful expression provides no .clone Greg Kroah-Hartman
2025-03-19 14:32 ` [PATCH 6.6 166/166] netfilter: nf_tables: allow clone callbacks to sleep Greg Kroah-Hartman
2025-03-19 16:33 ` [PATCH 6.6 000/166] 6.6.84-rc1 review Naresh Kamboju
2025-03-19 16:37   ` Jens Axboe
2025-03-19 17:02     ` Greg Kroah-Hartman
2025-03-19 23:51     ` Greg Kroah-Hartman
2025-03-20 12:55       ` Jens Axboe
2025-03-20 13:02         ` Jens Axboe
2025-03-20 13:22           ` Greg Kroah-Hartman
2025-03-19 16:55 ` SeongJae Park
2025-03-19 19:35 ` Jon Hunter
2025-03-20 10:28 ` Ron Economos
2025-03-20 11:15 ` Miguel Ojeda
2025-03-20 11:36 ` Mark Brown
2025-03-20 16:27 ` Hardik Garg
2025-03-21  0:36 ` Peter Schneider

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=20250319143024.337092602@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