aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndy Lutomirski <luto@kernel.org>2016-08-24 06:52:12 -0400
committerJens Axboe <axboe@fb.com>2016-08-24 10:11:10 -0400
commit9b47f77a680447e0132b2cf7fb82374e014bec1c (patch)
tree378444caba4b1dd20784e870999ce67c1680997f
parente9e5e3fae8da7e237049e00e0bfc9e32fd808fe8 (diff)
nvme: Fix nvme_get/set_features() with a NULL result pointer
nvme_set_features() callers seem to expect that passing NULL as the result pointer is acceptable. Teach nvme_set_features() not to try to write to the NULL address. For symmetry, make the same change to nvme_get_features(), despite the fact that all current callers pass a valid result pointer. I assume that this bug hasn't been reported in practice because the callers that pass NULL are all in the SCSI translation layer and no one uses the relevant operations. Cc: stable@vger.kernel.org Signed-off-by: Andy Lutomirski <luto@kernel.org> Reviewed-by: Sagi Grimberg <sagi@grimberg.me> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--drivers/nvme/host/core.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index 7f75d661237f..2feacc70bf61 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -611,7 +611,7 @@ int nvme_get_features(struct nvme_ctrl *dev, unsigned fid, unsigned nsid,
611 611
612 ret = __nvme_submit_sync_cmd(dev->admin_q, &c, &cqe, NULL, 0, 0, 612 ret = __nvme_submit_sync_cmd(dev->admin_q, &c, &cqe, NULL, 0, 0,
613 NVME_QID_ANY, 0, 0); 613 NVME_QID_ANY, 0, 0);
614 if (ret >= 0) 614 if (ret >= 0 && result)
615 *result = le32_to_cpu(cqe.result); 615 *result = le32_to_cpu(cqe.result);
616 return ret; 616 return ret;
617} 617}
@@ -631,7 +631,7 @@ int nvme_set_features(struct nvme_ctrl *dev, unsigned fid, unsigned dword11,
631 631
632 ret = __nvme_submit_sync_cmd(dev->admin_q, &c, &cqe, NULL, 0, 0, 632 ret = __nvme_submit_sync_cmd(dev->admin_q, &c, &cqe, NULL, 0, 0,
633 NVME_QID_ANY, 0, 0); 633 NVME_QID_ANY, 0, 0);
634 if (ret >= 0) 634 if (ret >= 0 && result)
635 *result = le32_to_cpu(cqe.result); 635 *result = le32_to_cpu(cqe.result);
636 return ret; 636 return ret;
637} 637}