aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorScott Bauer <scott.bauer@intel.com>2017-04-15 14:55:36 -0400
committerJens Axboe <axboe@fb.com>2017-04-16 12:06:25 -0400
commit2849a7becb9586a09553680a8b752fdb517b26e3 (patch)
tree5413b4d53c288bfa68381206cefc2f1467a55e9c
parent654a01b78846b96527263acb2fc373371c281896 (diff)
nvme/lightnvm: Prevent small buffer overflow in nvme_nvm_identify
There are two closely named structs in lightnvm: struct nvme_nvm_addr_format and struct nvme_addr_format. The first struct has 4 reserved bytes at the end, the second does not. (gdb) p sizeof(struct nvme_nvm_addr_format) $1 = 16 (gdb) p sizeof(struct nvm_addr_format) $2 = 12 In the nvme_nvm_identify function we memcpy from the larger struct to the smaller struct. We incorrectly pass the length of the larger struct and overflow by 4 bytes, lets not do that. Signed-off-by: Scott Bauer <scott.bauer@intel.com> Signed-off-by: Matias Bjørling <matias@cnexlabs.com> Signed-off-by: Jens Axboe <axboe@fb.com>
-rw-r--r--drivers/nvme/host/lightnvm.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
index 21cac8523bd8..fd9895423f55 100644
--- a/drivers/nvme/host/lightnvm.c
+++ b/drivers/nvme/host/lightnvm.c
@@ -324,7 +324,7 @@ static int nvme_nvm_identity(struct nvm_dev *nvmdev, struct nvm_id *nvm_id)
324 nvm_id->cap = le32_to_cpu(nvme_nvm_id->cap); 324 nvm_id->cap = le32_to_cpu(nvme_nvm_id->cap);
325 nvm_id->dom = le32_to_cpu(nvme_nvm_id->dom); 325 nvm_id->dom = le32_to_cpu(nvme_nvm_id->dom);
326 memcpy(&nvm_id->ppaf, &nvme_nvm_id->ppaf, 326 memcpy(&nvm_id->ppaf, &nvme_nvm_id->ppaf,
327 sizeof(struct nvme_nvm_addr_format)); 327 sizeof(struct nvm_addr_format));
328 328
329 ret = init_grps(nvm_id, nvme_nvm_id); 329 ret = init_grps(nvm_id, nvme_nvm_id);
330out: 330out: