aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Carpenter <dan.carpenter@linaro.org>2025-11-26 15:11:53 +0300
committerIra Weiny <ira.weiny@intel.com>2025-11-26 10:58:23 -0600
commit30065e73d7c018cf2e1bec68e2d6ffafc17b3c25 (patch)
treea196085888883c973d907bd3fd5bb8f4576160ee
parentacd9ea1714bbe910753bf6f3ce0e861a7fed6b56 (diff)
downloadtip-30065e73d7c018cf2e1bec68e2d6ffafc17b3c25.tar.gz
nvdimm: Prevent integer overflow in ramdax_get_config_data()
The "cmd->in_offset" variable comes from the user via the __nd_ioctl() function. The problem is that the "cmd->in_offset + cmd->in_length" addition could have an integer wrapping issue if cmd->in_offset is close to UINT_MAX . Both "cmd->in_offset" and "cmd->in_length" are u32 variables. Fixes: 43bc0aa19a21 ("nvdimm: allow exposing RAM carveouts as NVDIMM DIMM devices") Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org> Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Link: https://patch.msgid.link/aSbuiYCznEIZDa02@stanley.mountain Signed-off-by: Ira Weiny <ira.weiny@intel.com>
-rw-r--r--drivers/nvdimm/ramdax.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/nvdimm/ramdax.c b/drivers/nvdimm/ramdax.c
index 63cf057918290b..954cb79198070a 100644
--- a/drivers/nvdimm/ramdax.c
+++ b/drivers/nvdimm/ramdax.c
@@ -143,7 +143,7 @@ static int ramdax_get_config_data(struct nvdimm *nvdimm, int buf_len,
return -EINVAL;
if (struct_size(cmd, out_buf, cmd->in_length) > buf_len)
return -EINVAL;
- if (cmd->in_offset + cmd->in_length > LABEL_AREA_SIZE)
+ if (size_add(cmd->in_offset, cmd->in_length) > LABEL_AREA_SIZE)
return -EINVAL;
memcpy(cmd->out_buf, dimm->label_area + cmd->in_offset, cmd->in_length);
@@ -160,7 +160,7 @@ static int ramdax_set_config_data(struct nvdimm *nvdimm, int buf_len,
return -EINVAL;
if (struct_size(cmd, in_buf, cmd->in_length) > buf_len)
return -EINVAL;
- if (cmd->in_offset + cmd->in_length > LABEL_AREA_SIZE)
+ if (size_add(cmd->in_offset, cmd->in_length) > LABEL_AREA_SIZE)
return -EINVAL;
memcpy(dimm->label_area + cmd->in_offset, cmd->in_buf, cmd->in_length);