From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Maurizio Lombardi <mlombard@redhat.com>,
Keith Busch <kbusch@kernel.org>, Sagi Grimberg <sagi@grimberg.me>,
John Meneghini <jmeneghi@redhat.com>,
Christoph Hellwig <hch@lst.de>, Sasha Levin <sashal@kernel.org>,
kch@nvidia.com, linux-nvme@lists.infradead.org
Subject: [PATCH AUTOSEL 5.10 27/43] nvmet-tcp: fix a race condition between release_queue and io_work
Date: Tue, 30 Nov 2021 09:50:04 -0500 [thread overview]
Message-ID: <20211130145022.945517-27-sashal@kernel.org> (raw)
In-Reply-To: <20211130145022.945517-1-sashal@kernel.org>
From: Maurizio Lombardi <mlombard@redhat.com>
[ Upstream commit a208fc56721775987c1b86e20d86d7e0d017c0b2 ]
If the initiator executes a reset controller operation while
performing I/O, the target kernel will crash because of a race condition
between release_queue and io_work;
nvmet_tcp_uninit_data_in_cmds() may be executed while io_work
is running, calling flush_work() was not sufficient to
prevent this because io_work could requeue itself.
Fix this bug by using cancel_work_sync() to prevent io_work
from requeuing itself and set rcv_state to NVMET_TCP_RECV_ERR to
make sure we don't receive any more data from the socket.
Signed-off-by: Maurizio Lombardi <mlombard@redhat.com>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Sagi Grimberg <sagi@grimberg.me>
Reviewed-by: John Meneghini <jmeneghi@redhat.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/nvme/target/tcp.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/nvme/target/tcp.c b/drivers/nvme/target/tcp.c
index 1251fd6e92780..f726964b56555 100644
--- a/drivers/nvme/target/tcp.c
+++ b/drivers/nvme/target/tcp.c
@@ -1407,7 +1407,9 @@ static void nvmet_tcp_release_queue_work(struct work_struct *w)
mutex_unlock(&nvmet_tcp_queue_mutex);
nvmet_tcp_restore_socket_callbacks(queue);
- flush_work(&queue->io_work);
+ cancel_work_sync(&queue->io_work);
+ /* stop accepting incoming data */
+ queue->rcv_state = NVMET_TCP_RECV_ERR;
nvmet_tcp_uninit_data_in_cmds(queue);
nvmet_sq_destroy(&queue->nvme_sq);
--
2.33.0
next prev parent reply other threads:[~2021-11-30 14:54 UTC|newest]
Thread overview: 43+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-30 14:49 [PATCH AUTOSEL 5.10 01/43] ASoC: mediatek: mt8173-rt5650: Rename Speaker control to Ext Spk Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 02/43] ASoC: Intel: sof_sdw: Add support for SKU 0AF3 product Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 03/43] ASoC: Intel: sof_sdw: Add support for SKU 0B00 and 0B01 products Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 04/43] ASoC: Intel: sof_sdw: Add support for SKU 0B11 product Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 05/43] ASoC: Intel: sof_sdw: Add support for SKU 0B13 product Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 06/43] ASoC: Intel: sof_sdw: Add support for SKU 0B29 product Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 07/43] ASoC: Intel: sof_sdw: Add support for SKU 0B12 product Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 08/43] ASoC: mediatek: mt8173: Fix debugfs registration for components Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 09/43] ASoC: qdsp6: q6adm: improve error reporting Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 10/43] ASoC: qdsp6: q6routing: validate port id before setting up route Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 11/43] xen/privcmd: make option visible in Kconfig Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 12/43] NFSv4.1: handle NFS4ERR_NOSPC by CREATE_SESSION Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 13/43] scsi: scsi_debug: Fix type in min_t to avoid stack OOB Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 14/43] atlantic: fix double-free in aq_ring_tx_clean Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 15/43] stmmac_pci: Fix underflow size in stmmac_rx Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 16/43] HID: multitouch: Fix Iiyama ProLite T1931SAW (0eef:0001 again!) Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 17/43] parisc: Provide an extru_safe() macro to extract unsigned bits Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 18/43] parisc: Fix extraction of hash lock bits in syscall.S Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 19/43] parisc: Convert PTE lookup to use extru_safe() macro Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 20/43] selftests/tc-testings: Be compatible with newer tc output Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 21/43] scsi: scsi_debug: Sanity check block descriptor length in resp_mode_select() Sasha Levin
2021-11-30 14:49 ` [PATCH AUTOSEL 5.10 22/43] locking/rwsem: Optimize down_read_trylock() under highly contended case Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 23/43] i2c: i801: Fix interrupt storm from SMB_ALERT signal Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 24/43] mmc: spi: Add device-tree SPI IDs Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 25/43] net: chelsio: cxgb4vf: Fix an error code in cxgb4vf_pci_probe() Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 26/43] smb2: clarify rc initialization in smb2_reconnect Sasha Levin
2021-11-30 14:50 ` Sasha Levin [this message]
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 28/43] nvmet-tcp: add an helper to free the cmd buffers Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 29/43] nvmet-tcp: fix memory leak when performing a controller reset Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 30/43] nvme-tcp: validate R2T PDU in nvme_tcp_handle_r2t() Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 31/43] nvme-tcp: fix memory leak when freeing a queue Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 32/43] nvme-pci: add NO APST quirk for Kioxia device Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 33/43] nvme: fix write zeroes pi Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 34/43] xen: add "not_essential" flag to struct xenbus_driver Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 35/43] xen: flag xen_drm_front to be not essential for system boot Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 36/43] xen: flag hvc_xen " Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 37/43] xen: flag pvcalls-front " Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 38/43] xen: flag xen_snd_front " Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 39/43] PM: hibernate: Fix snapshot partial write lengths Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 40/43] vhost-vdpa: clean irqs before reseting vdpa device Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 41/43] net: qed: fix the array may be out of bound Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 42/43] net: ptp: add a definition for the UDP port for IEEE 1588 general messages Sasha Levin
2021-11-30 14:50 ` [PATCH AUTOSEL 5.10 43/43] fs: ntfs: Limit NTFS_RW to page sizes smaller than 64k Sasha Levin
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=20211130145022.945517-27-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=hch@lst.de \
--cc=jmeneghi@redhat.com \
--cc=kbusch@kernel.org \
--cc=kch@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=mlombard@redhat.com \
--cc=sagi@grimberg.me \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®