Skip to content

Commit 6d525f9

Browse files
Amit Engelkeithbusch
authored andcommitted
nvmet: check ncqr & nsqr for set-features cmd
For set feature command when setting up NVME_FEAT_NUM_QUEUES, check Number of I/O Completion Queues Requested (NCQR) and Number of I/O Submission Queues Requested (NSQR) before we proceed, for invalid values (i.e. 65535) return an appropriate NVMe invalid field status. Signed-off-by: Amit Engel <[email protected]> Signed-off-by: Chaitanya Kulkarni <[email protected]> Reviewed-by: Sagi Grimberg <[email protected]> Signed-off-by: Keith Busch <[email protected]>
1 parent 3e98c24 commit 6d525f9

File tree

1 file changed

+9
-0
lines changed

1 file changed

+9
-0
lines changed

drivers/nvme/target/admin-cmd.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -733,13 +733,22 @@ static void nvmet_execute_set_features(struct nvmet_req *req)
733733
{
734734
struct nvmet_subsys *subsys = req->sq->ctrl->subsys;
735735
u32 cdw10 = le32_to_cpu(req->cmd->common.cdw10);
736+
u32 cdw11 = le32_to_cpu(req->cmd->common.cdw11);
736737
u16 status = 0;
738+
u16 nsqr;
739+
u16 ncqr;
737740

738741
if (!nvmet_check_data_len(req, 0))
739742
return;
740743

741744
switch (cdw10 & 0xff) {
742745
case NVME_FEAT_NUM_QUEUES:
746+
ncqr = (cdw11 >> 16) & 0xffff;
747+
nsqr = cdw11 & 0xffff;
748+
if (ncqr == 0xffff || nsqr == 0xffff) {
749+
status = NVME_SC_INVALID_FIELD | NVME_SC_DNR;
750+
break;
751+
}
743752
nvmet_set_result(req,
744753
(subsys->max_qid - 1) | ((subsys->max_qid - 1) << 16));
745754
break;

0 commit comments

Comments
 (0)