mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
cxl/test: Fix integer overflow in mock LSA bounds checks
[ Upstream commit81eafcada1] Pre-existing issue discovered by sashiko-bot. mock_get_lsa() and mock_set_lsa() validate the requested LSA range with "offset + length > LSA_SIZE". Both offset and length are u32 and, in mock_get_lsa(), both are taken directly from the user-supplied payload. The addition is evaluated modulo 2^32, so a large offset combined with a small length wraps around and passes the check. Rewrite the checks to first bound offset, then compare length against the remaining LSA size. Suggested-by: sashiko-bot Fixes:7d3eb23c4c("tools/testing/cxl: Introduce a mock memory device + driver") Link: https://lore.kernel.org/linux-cxl/20260605143748.235271F00893@smtp.kernel.org/ Assisted-by: Claude:claude-opus-4-8 Reviewed-by: Alison Schofield <alison.schofield@intel.com> Signed-off-by: Dave Jiang <dave.jiang@intel.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2a0ee19de6
commit
0101d4000a
@@ -940,7 +940,7 @@ static int mock_get_lsa(struct cxl_mockmem_data *mdata,
|
||||
return -EINVAL;
|
||||
offset = le32_to_cpu(get_lsa->offset);
|
||||
length = le32_to_cpu(get_lsa->length);
|
||||
if (offset + length > LSA_SIZE)
|
||||
if (offset > LSA_SIZE || length > LSA_SIZE - offset)
|
||||
return -EINVAL;
|
||||
if (length > cmd->size_out)
|
||||
return -EINVAL;
|
||||
@@ -960,7 +960,7 @@ static int mock_set_lsa(struct cxl_mockmem_data *mdata,
|
||||
return -EINVAL;
|
||||
offset = le32_to_cpu(set_lsa->offset);
|
||||
length = cmd->size_in - sizeof(*set_lsa);
|
||||
if (offset + length > LSA_SIZE)
|
||||
if (offset > LSA_SIZE || length > LSA_SIZE - offset)
|
||||
return -EINVAL;
|
||||
|
||||
memcpy(lsa + offset, &set_lsa->data[0], length);
|
||||
|
||||
Reference in New Issue
Block a user