From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
patches@lists.linux.dev, Hannes Reinecke <hare@suse.de>,
Shinichiro Kawasaki <shinichiro.kawasaki@wdc.com>,
Keith Busch <kbusch@kernel.org>, Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.11 10/63] nvme: tcp: avoid race between queue_lock lock and destroy
Date: Fri, 15 Nov 2024 07:37:33 +0100 [thread overview]
Message-ID: <20241115063726.269633322@linuxfoundation.org> (raw)
In-Reply-To: <20241115063725.892410236@linuxfoundation.org>
6.11-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hannes Reinecke <hare@suse.de>
[ Upstream commit 782373ba27660ba7d330208cf5509ece6feb4545 ]
Commit 76d54bf20cdc ("nvme-tcp: don't access released socket during
error recovery") added a mutex_lock() call for the queue->queue_lock
in nvme_tcp_get_address(). However, the mutex_lock() races with
mutex_destroy() in nvme_tcp_free_queue(), and causes the WARN below.
DEBUG_LOCKS_WARN_ON(lock->magic != lock)
WARNING: CPU: 3 PID: 34077 at kernel/locking/mutex.c:587 __mutex_lock+0xcf0/0x1220
Modules linked in: nvmet_tcp nvmet nvme_tcp nvme_fabrics iw_cm ib_cm ib_core pktcdvd nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib nft_reject_inet nf_reject_ipv4 nf_reject_ipv6 nft_reject nft_ct nft_chain_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip_set nf_tables qrtr sunrpc ppdev 9pnet_virtio 9pnet pcspkr netfs parport_pc parport e1000 i2c_piix4 i2c_smbus loop fuse nfnetlink zram bochs drm_vram_helper drm_ttm_helper ttm drm_kms_helper xfs drm sym53c8xx floppy nvme scsi_transport_spi nvme_core nvme_auth serio_raw ata_generic pata_acpi dm_multipath qemu_fw_cfg [last unloaded: ib_uverbs]
CPU: 3 UID: 0 PID: 34077 Comm: udisksd Not tainted 6.11.0-rc7 #319
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-2.fc40 04/01/2014
RIP: 0010:__mutex_lock+0xcf0/0x1220
Code: 08 84 d2 0f 85 c8 04 00 00 8b 15 ef b6 c8 01 85 d2 0f 85 78 f4 ff ff 48 c7 c6 20 93 ee af 48 c7 c7 60 91 ee af e8 f0 a7 6d fd <0f> 0b e9 5e f4 ff ff 48 b8 00 00 00 00 00 fc ff df 4c 89 f2 48 c1
RSP: 0018:ffff88811305f760 EFLAGS: 00010286
RAX: 0000000000000000 RBX: ffff88812c652058 RCX: 0000000000000000
RDX: 0000000000000000 RSI: 0000000000000004 RDI: 0000000000000001
RBP: ffff88811305f8b0 R08: 0000000000000001 R09: ffffed1075c36341
R10: ffff8883ae1b1a0b R11: 0000000000010498 R12: 0000000000000000
R13: 0000000000000000 R14: dffffc0000000000 R15: ffff88812c652058
FS: 00007f9713ae4980(0000) GS:ffff8883ae180000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007fcd78483c7c CR3: 0000000122c38000 CR4: 00000000000006f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
<TASK>
? __warn.cold+0x5b/0x1af
? __mutex_lock+0xcf0/0x1220
? report_bug+0x1ec/0x390
? handle_bug+0x3c/0x80
? exc_invalid_op+0x13/0x40
? asm_exc_invalid_op+0x16/0x20
? __mutex_lock+0xcf0/0x1220
? nvme_tcp_get_address+0xc2/0x1e0 [nvme_tcp]
? __pfx___mutex_lock+0x10/0x10
? __lock_acquire+0xd6a/0x59e0
? nvme_tcp_get_address+0xc2/0x1e0 [nvme_tcp]
nvme_tcp_get_address+0xc2/0x1e0 [nvme_tcp]
? __pfx_nvme_tcp_get_address+0x10/0x10 [nvme_tcp]
nvme_sysfs_show_address+0x81/0xc0 [nvme_core]
dev_attr_show+0x42/0x80
? __asan_memset+0x1f/0x40
sysfs_kf_seq_show+0x1f0/0x370
seq_read_iter+0x2cb/0x1130
? rw_verify_area+0x3b1/0x590
? __mutex_lock+0x433/0x1220
vfs_read+0x6a6/0xa20
? lockdep_hardirqs_on+0x78/0x100
? __pfx_vfs_read+0x10/0x10
ksys_read+0xf7/0x1d0
? __pfx_ksys_read+0x10/0x10
? __x64_sys_openat+0x105/0x1d0
do_syscall_64+0x93/0x180
? lockdep_hardirqs_on_prepare+0x16d/0x400
? do_syscall_64+0x9f/0x180
? lockdep_hardirqs_on+0x78/0x100
? do_syscall_64+0x9f/0x180
? __pfx_ksys_read+0x10/0x10
? lockdep_hardirqs_on_prepare+0x16d/0x400
? do_syscall_64+0x9f/0x180
? lockdep_hardirqs_on+0x78/0x100
? do_syscall_64+0x9f/0x180
? lockdep_hardirqs_on_prepare+0x16d/0x400
? do_syscall_64+0x9f/0x180
? lockdep_hardirqs_on+0x78/0x100
? do_syscall_64+0x9f/0x180
? lockdep_hardirqs_on_prepare+0x16d/0x400
? do_syscall_64+0x9f/0x180
? lockdep_hardirqs_on+0x78/0x100
? do_syscall_64+0x9f/0x180
? lockdep_hardirqs_on_prepare+0x16d/0x400
? do_syscall_64+0x9f/0x180
? lockdep_hardirqs_on+0x78/0x100
? do_syscall_64+0x9f/0x180
? do_syscall_64+0x9f/0x180
entry_SYSCALL_64_after_hwframe+0x76/0x7e
RIP: 0033:0x7f9713f55cfa
Code: 55 48 89 e5 48 83 ec 20 48 89 55 e8 48 89 75 f0 89 7d f8 e8 e8 74 f8 ff 48 8b 55 e8 48 8b 75 f0 41 89 c0 8b 7d f8 31 c0 0f 05 <48> 3d 00 f0 ff ff 77 2e 44 89 c7 48 89 45 f8 e8 42 75 f8 ff 48 8b
RSP: 002b:00007ffd7f512e70 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
RAX: ffffffffffffffda RBX: 000055c38f316859 RCX: 00007f9713f55cfa
RDX: 0000000000000fff RSI: 00007ffd7f512eb0 RDI: 0000000000000011
RBP: 00007ffd7f512e90 R08: 0000000000000000 R09: 00000000ffffffff
R10: 0000000000000000 R11: 0000000000000246 R12: 000055c38f317148
R13: 0000000000000000 R14: 00007f96f4004f30 R15: 000055c3b6b623c0
</TASK>
The WARN is observed when the blktests test case nvme/014 is repeated
with tcp transport. It is rare, and 200 times repeat is required to
recreate in some test environments.
To avoid the WARN, check the NVME_TCP_Q_LIVE flag before locking
queue->queue_lock. The flag is cleared long time before the lock gets
destroyed.
Signed-off-by: Hannes Reinecke <hare@suse.de>
Signed-off-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/nvme/host/tcp.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/nvme/host/tcp.c b/drivers/nvme/host/tcp.c
index e3d82e91151af..c4d776c0ec206 100644
--- a/drivers/nvme/host/tcp.c
+++ b/drivers/nvme/host/tcp.c
@@ -2644,10 +2644,11 @@ static int nvme_tcp_get_address(struct nvme_ctrl *ctrl, char *buf, int size)
len = nvmf_get_address(ctrl, buf, size);
+ if (!test_bit(NVME_TCP_Q_LIVE, &queue->flags))
+ return len;
+
mutex_lock(&queue->queue_lock);
- if (!test_bit(NVME_TCP_Q_LIVE, &queue->flags))
- goto done;
ret = kernel_getsockname(queue->sock, (struct sockaddr *)&src_addr);
if (ret > 0) {
if (len > 0)
@@ -2655,7 +2656,7 @@ static int nvme_tcp_get_address(struct nvme_ctrl *ctrl, char *buf, int size)
len += scnprintf(buf + len, size - len, "%ssrc_addr=%pISc\n",
(len) ? "," : "", &src_addr);
}
-done:
+
mutex_unlock(&queue->queue_lock);
return len;
--
2.43.0
next prev parent reply other threads:[~2024-11-15 6:46 UTC|newest]
Thread overview: 78+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-11-15 6:37 [PATCH 6.11 00/63] 6.11.9-rc1 review Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 01/63] smb: client: Fix use-after-free of network namespace Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 02/63] nvme/host: Fix RCU list traversal to use SRCU primitive Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 03/63] 9p: v9fs_fid_find: also lookup by inode if not found dentry Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 04/63] 9p: Avoid creating multiple slab caches with the same name Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 05/63] selftests/bpf: Verify that sync_linked_regs preserves subreg_def Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 06/63] nvmet-passthru: clear EUID/NGUID/UUID while using loop target Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 07/63] irqchip/ocelot: Fix trigger register address Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 08/63] pinctrl: aw9523: add missing mutex_destroy Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 09/63] pinctrl: intel: platform: Add Panther Lake to the list of supported Greg Kroah-Hartman
2024-11-15 6:37 ` Greg Kroah-Hartman [this message]
2024-11-15 6:37 ` [PATCH 6.11 11/63] block: Fix elevator_get_default() checking for NULL q->tag_set Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 12/63] HID: multitouch: Add support for B2402FVA track point Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 13/63] HID: multitouch: Add quirk for HONOR MagicBook Art 14 touchpad Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 14/63] iommu/arm-smmu: Clarify MMU-500 CPRE workaround Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 15/63] nvme: disable CC.CRIME (NVME_CC_CRIME) Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 16/63] bpf: use kvzmalloc to allocate BPF verifier environment Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 17/63] crypto: api - Fix liveliness check in crypto_alg_tested Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 18/63] crypto: marvell/cesa - Disable hash algorithms Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 19/63] s390/ap: Fix CCA crypto card behavior within protected execution environment Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 20/63] sound: Make CONFIG_SND depend on INDIRECT_IOMEM instead of UML Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 21/63] drm/vmwgfx: Limit display layout ioctl array size to VMWGFX_NUM_DISPLAY_UNITS Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 22/63] selftests/bpf: Assert link info uprobe_multi count & path_size if unset Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 23/63] RDMA/siw: Add sendpage_ok() check to disable MSG_SPLICE_PAGES Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 24/63] ALSA: hda/tas2781: Add new quirk for Lenovo, ASUS, Dell projects Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 25/63] kasan: Disable Software Tag-Based KASAN with GCC Greg Kroah-Hartman
2024-11-15 6:55 ` Jiri Slaby
2024-11-15 9:27 ` Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 26/63] nvme-multipath: defer partition scanning Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 27/63] drm/amdkfd: Accounting pdd vram_usage for svm Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 28/63] powerpc/powernv: Free name on error in opal_event_init() Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 29/63] net: phy: mdio-bcm-unimac: Add BCM6846 support Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 30/63] drm/xe/query: Increase timestamp width Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 31/63] nvme-loop: flush off pending I/O while shutting down loop controller Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 32/63] nvme: make keep-alive synchronous operation Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 33/63] samples/landlock: Fix port parsing in sandboxer Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 34/63] vDPA/ifcvf: Fix pci_read_config_byte() return code handling Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 35/63] virtio_pci: Fix admin vq cleanup by using correct info pointer Greg Kroah-Hartman
2024-11-15 6:37 ` [PATCH 6.11 36/63] bpf: Add sk_is_inet and IS_ICSK check in tls_sw_has_ctx_tx/rx Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 37/63] bpf: Fix mismatched RCU unlock flavour in bpf_out_neigh_v6 Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 38/63] ASoC: Intel: avs: Update stream status in a separate thread Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 39/63] ASoC: codecs: Fix error handling in aw_dev_get_dsp_status function Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 40/63] ASoC: amd: yc: Add quirk for ASUS Vivobook S15 M3502RA Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 41/63] ASoC: amd: yc: Fix non-functional mic on ASUS E1404FA Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 42/63] ASoC: Intel: soc-acpi: lnl: Add match entry for TM2 laptops Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 43/63] netfs: Downgrade i_rwsem for a buffered write Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 44/63] fs: Fix uninitialized value issue in from_kuid and from_kgid Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 45/63] afs: Fix lock recursion Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 46/63] HID: i2c-hid: Delayed i2c resume wakeup for 0x0d42 Goodix touchpad Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 47/63] HID: multitouch: Add quirk for Logitech Bolt receiver w/ Casa touchpad Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 48/63] HID: lenovo: Add support for Thinkpad X1 Tablet Gen 3 keyboard Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 49/63] ASoC: codecs: lpass-rx-macro: fix RXn(rx,n) macro for DSM_CTL and SEC7 regs Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 50/63] RISCV: KVM: use raw_spinlock for critical section in imsic Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 51/63] ASoC: rt722-sdca: increase clk_stop_timeout to fix clock stop issue Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 52/63] LoongArch: Use "Exception return address" to comment ERA Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 53/63] ASoC: fsl_micfil: Add sample rate constraint Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 54/63] LoongArch: KVM: Mark hrtimer to expire in hard interrupt context Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 55/63] net: usb: qmi_wwan: add Fibocom FG132 0x0112 composition Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 56/63] bpf: Check validity of link->type in bpf_link_show_fdinfo() Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 57/63] drm/xe: Enlarge the invalidation timeout from 150 to 500 Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 58/63] drm/xe/guc/ct: Flush g2h worker in case of g2h response timeout Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 59/63] drm/xe: Handle unreliable MMIO reads during forcewake Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 60/63] drm/xe/ufence: Prefetch ufence addr to catch bogus address Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 61/63] drm/xe: Dont restart parallel queues multiple times on GT reset Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 62/63] mm: krealloc: Fix MTE false alarm in __do_krealloc Greg Kroah-Hartman
2024-11-15 6:38 ` [PATCH 6.11 63/63] 9p: fix slab cache name creation for real Greg Kroah-Hartman
2024-11-15 8:16 ` [PATCH 6.11 00/63] 6.11.9-rc1 review Luna Jernberg
2024-11-15 17:40 ` Peter Schneider
2024-11-15 18:11 ` Jon Hunter
2024-11-15 19:48 ` Florian Fainelli
2024-11-15 21:18 ` Mark Brown
2024-11-15 23:50 ` Ron Economos
2024-11-16 8:07 ` Naresh Kamboju
2024-11-16 17:17 ` [PATCH 6.11] " Hardik Garg
2024-11-16 20:52 ` [PATCH 6.11 00/63] " Markus Reichelt
2024-11-16 21:04 ` Shuah Khan
2024-11-17 13:24 ` Muhammad Usama Anjum
2024-11-17 13:30 ` Pavel Machek
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=20241115063726.269633322@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=hare@suse.de \
--cc=kbusch@kernel.org \
--cc=patches@lists.linux.dev \
--cc=sashal@kernel.org \
--cc=shinichiro.kawasaki@wdc.com \
--cc=stable@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.