From: Jiaran Zhang <[email protected]>

[ Upstream commit 768202a0825d447de785e87ff1ea1d3c86a71727 ]

calc_pg_sz() may gets a data calculation overflow if the PAGE_SIZE is 64 KB
and hop_num is 2. It is because that all variables involved in calculation
are defined in type of int. So change the type of bt_chunk_size,
buf_chunk_size and obj_per_chunk_default to u64.

Fixes: ba6bb7e97421 ("RDMA/hns: Add interfaces to get pf capabilities from 
firmware")
Link: 
https://lore.kernel.org/r/[email protected]
Signed-off-by: Jiaran Zhang <[email protected]>
Signed-off-by: Weihang Li <[email protected]>
Signed-off-by: Jason Gunthorpe <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>
---
 drivers/infiniband/hw/hns/hns_roce_hw_v2.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c 
b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
index 0f995aa23b9a9..fdd9605c67630 100644
--- a/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
+++ b/drivers/infiniband/hw/hns/hns_roce_hw_v2.c
@@ -1770,9 +1770,9 @@ static void calc_pg_sz(int obj_num, int obj_size, int 
hop_num, int ctx_bt_num,
                       int *buf_page_size, int *bt_page_size, u32 hem_type)
 {
        u64 obj_per_chunk;
-       int bt_chunk_size = 1 << PAGE_SHIFT;
-       int buf_chunk_size = 1 << PAGE_SHIFT;
-       int obj_per_chunk_default = buf_chunk_size / obj_size;
+       u64 bt_chunk_size = PAGE_SIZE;
+       u64 buf_chunk_size = PAGE_SIZE;
+       u64 obj_per_chunk_default = buf_chunk_size / obj_size;
 
        *buf_page_size = 0;
        *bt_page_size = 0;
-- 
2.25.1



Reply via email to