From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: "min15.li" <min15.li@samsung.com>,
Kanchan Joshi <joshi.k@samsung.com>,
Christoph Hellwig <hch@lst.de>, Keith Busch <kbusch@kernel.org>,
Sasha Levin <sashal@kernel.org>,
sagi@grimberg.me, kch@nvidia.com, linux-nvme@lists.infradead.org
Subject: [PATCH AUTOSEL 6.3 15/19] nvme: fix miss command type check
Date: Thu, 15 Jun 2023 07:37:15 -0400 [thread overview]
Message-ID: <20230615113719.648862-15-sashal@kernel.org> (raw)
In-Reply-To: <20230615113719.648862-1-sashal@kernel.org>
From: "min15.li" <min15.li@samsung.com>
[ Upstream commit 31a5978243d24d77be4bacca56c78a0fbc43b00d ]
In the function nvme_passthru_end(), only the value of the command
opcode is checked, without checking the command type (IO command or
Admin command). When we send a Dataset Management command (The opcode
of the Dataset Management command is the same as the Set Feature
command), kernel thinks it is a set feature command, then sets the
controller's keep alive interval, and calls nvme_keep_alive_work().
Signed-off-by: min15.li <min15.li@samsung.com>
Reviewed-by: Kanchan Joshi <joshi.k@samsung.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/nvme/host/core.c | 4 +++-
drivers/nvme/host/ioctl.c | 2 +-
drivers/nvme/host/nvme.h | 2 +-
drivers/nvme/target/passthru.c | 2 +-
4 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index bdf1601219fc4..dba10d182c6b6 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -1115,7 +1115,7 @@ u32 nvme_passthru_start(struct nvme_ctrl *ctrl, struct nvme_ns *ns, u8 opcode)
}
EXPORT_SYMBOL_NS_GPL(nvme_passthru_start, NVME_TARGET_PASSTHRU);
-void nvme_passthru_end(struct nvme_ctrl *ctrl, u32 effects,
+void nvme_passthru_end(struct nvme_ctrl *ctrl, struct nvme_ns *ns, u32 effects,
struct nvme_command *cmd, int status)
{
if (effects & NVME_CMD_EFFECTS_CSE_MASK) {
@@ -1132,6 +1132,8 @@ void nvme_passthru_end(struct nvme_ctrl *ctrl, u32 effects,
nvme_queue_scan(ctrl);
flush_work(&ctrl->scan_work);
}
+ if (ns)
+ return;
switch (cmd->common.opcode) {
case nvme_admin_set_features:
diff --git a/drivers/nvme/host/ioctl.c b/drivers/nvme/host/ioctl.c
index d24ea2e051564..0264ec74a4361 100644
--- a/drivers/nvme/host/ioctl.c
+++ b/drivers/nvme/host/ioctl.c
@@ -254,7 +254,7 @@ static int nvme_submit_user_cmd(struct request_queue *q,
blk_mq_free_request(req);
if (effects)
- nvme_passthru_end(ctrl, effects, cmd, ret);
+ nvme_passthru_end(ctrl, ns, effects, cmd, ret);
return ret;
}
diff --git a/drivers/nvme/host/nvme.h b/drivers/nvme/host/nvme.h
index bf46f122e9e1e..fcf3af2d64509 100644
--- a/drivers/nvme/host/nvme.h
+++ b/drivers/nvme/host/nvme.h
@@ -1072,7 +1072,7 @@ u32 nvme_command_effects(struct nvme_ctrl *ctrl, struct nvme_ns *ns,
u8 opcode);
u32 nvme_passthru_start(struct nvme_ctrl *ctrl, struct nvme_ns *ns, u8 opcode);
int nvme_execute_rq(struct request *rq, bool at_head);
-void nvme_passthru_end(struct nvme_ctrl *ctrl, u32 effects,
+void nvme_passthru_end(struct nvme_ctrl *ctrl, struct nvme_ns *ns, u32 effects,
struct nvme_command *cmd, int status);
struct nvme_ctrl *nvme_ctrl_from_file(struct file *file);
struct nvme_ns *nvme_find_get_ns(struct nvme_ctrl *ctrl, unsigned nsid);
diff --git a/drivers/nvme/target/passthru.c b/drivers/nvme/target/passthru.c
index 511c980d538df..71a9c1cc57f59 100644
--- a/drivers/nvme/target/passthru.c
+++ b/drivers/nvme/target/passthru.c
@@ -243,7 +243,7 @@ static void nvmet_passthru_execute_cmd_work(struct work_struct *w)
blk_mq_free_request(rq);
if (effects)
- nvme_passthru_end(ctrl, effects, req->cmd, status);
+ nvme_passthru_end(ctrl, ns, effects, req->cmd, status);
}
static enum rq_end_io_ret nvmet_passthru_req_done(struct request *rq,
--
2.39.2
next prev parent reply other threads:[~2023-06-15 11:39 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-15 11:37 [PATCH AUTOSEL 6.3 01/19] regmap: Account for register length when chunking Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 02/19] iommu/amd: Handle GALog overflows Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 03/19] scsi: target: iscsi: Fix hang in the iSCSI login code Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 04/19] scsi: target: iscsi: Remove unused transport_timer Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 05/19] scsi: target: iscsi: Prevent login threads from racing between each other Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 06/19] HID: google: add jewel USB id Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 07/19] HID: wacom: Add error check to wacom_parse_and_register() Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 08/19] arm64: Add missing Set/Way CMO encodings Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 09/19] smb3: missing null check in SMB2_change_notify Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 10/19] media: cec: core: disable adapter in cec_devnode_unregister Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 11/19] media: cec: core: don't set last_initiator if tx in progress Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 12/19] nfcsim.c: Fix error checking for debugfs_create_dir Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 13/19] btrfs: fix an uninitialized variable warning in btrfs_log_inode Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 14/19] usb: gadget: udc: fix NULL dereference in remove() Sasha Levin
2023-06-15 11:37 ` Sasha Levin [this message]
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 16/19] nvme: double KA polling frequency to avoid KATO with TBKAS on Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 17/19] nvme: check IO start time when deciding to defer KA Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 18/19] ext4: enable the lazy init thread when remounting read/write Sasha Levin
2023-06-15 11:37 ` [PATCH AUTOSEL 6.3 19/19] nvme: improve handling of long keep alives 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=20230615113719.648862-15-sashal@kernel.org \
--to=sashal@kernel.org \
--cc=hch@lst.de \
--cc=joshi.k@samsung.com \
--cc=kbusch@kernel.org \
--cc=kch@nvidia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-nvme@lists.infradead.org \
--cc=min15.li@samsung.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