summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKeith Busch <keith.busch@intel.com>2016-02-24 09:15:58 -0700
committerJens Axboe <axboe@fb.com>2016-03-03 14:42:50 -0700
commite9fc63d682dbbef17921aeb00d03fd52d6735ffd (patch)
tree33d5f3ece18a1724ad42b79a7c4970859efca5e8
parent63088ec7c8eadfe08b96127a41b385ec9742dace (diff)
downloadlinux-stable-e9fc63d682dbbef17921aeb00d03fd52d6735ffd.tar.gz
linux-stable-e9fc63d682dbbef17921aeb00d03fd52d6735ffd.tar.bz2
linux-stable-e9fc63d682dbbef17921aeb00d03fd52d6735ffd.zip
NVMe: Fix 0-length integrity payload
A user could send a passthrough IO command with a metadata pointer to a namespace without metadata. With metadata length of 0, kmalloc returns ZERO_SIZE_PTR. Since that is not NULL, the driver would have set this as the bio's integrity payload, which causes an access fault on completion. This patch ignores the users metadata buffer if the namespace format does not support separate metadata. Reported-by: Stephen Bates <stephen.bates@microsemi.com> Signed-off-by: Keith Busch <keith.busch@intel.com> Reviewed-by: Sagi Grimberg <sagig@mellanox.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--drivers/nvme/host/core.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/nvme/host/core.c b/drivers/nvme/host/core.c
index ba1501514128..470d4f373841 100644
--- a/drivers/nvme/host/core.c
+++ b/drivers/nvme/host/core.c
@@ -184,7 +184,7 @@ int __nvme_submit_user_cmd(struct request_queue *q, struct nvme_command *cmd,
goto out_unmap;
}
- if (meta_buffer) {
+ if (meta_buffer && meta_len) {
struct bio_integrity_payload *bip;
meta = kmalloc(meta_len, GFP_KERNEL);