mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-09-22 09:34:56 +02:00
RDMA/hns: Fix potential integer overflow in mhop hem cleanup
[ Upstream commit9f0f2d2121] In hns_roce_cleanup_mhop_hem_table(), the expression: obj = i * buf_chunk_size / table->obj_size; is evaluated using 32-bit unsigned arithmetic because 'buf_chunk_size' is u32 and the usual arithmetic conversions convert 'i' to unsigned int. The result is assigned to a u64 variable, but the multiplication may overflow before the assignment. For sufficiently large HEM tables, this produces an incorrect object index passed to hns_roce_table_mhop_put(). Cast 'i' to u64 before the multiplication so that the intermediate calculation is performed with 64-bit arithmetic. Found by Linux Verification Center (linuxtesting.org) with SVACE. Fixes:a25d13cbe8("RDMA/hns: Add the interfaces to support multi hop addressing for the contexts in hip08") Link: https://patch.msgid.link/r/20260627095951.51378-1-listdansp@mail.ru Signed-off-by: Danila Chernetsov <listdansp@mail.ru> Reviewed-by: Junxian Huang <huangjunxian6@hisilicon.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
0e861c8a69
commit
2fcf86887f
@@ -907,7 +907,7 @@ static void hns_roce_cleanup_mhop_hem_table(struct hns_roce_dev *hr_dev,
|
||||
mhop.bt_chunk_size;
|
||||
|
||||
for (i = 0; i < table->num_hem; ++i) {
|
||||
obj = i * buf_chunk_size / table->obj_size;
|
||||
obj = (u64)i * buf_chunk_size / table->obj_size;
|
||||
if (table->hem[i])
|
||||
hns_roce_table_mhop_put(hr_dev, table, obj, 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user