Patch "RDMA/hns: Fix shift-out-bounds when max_inline_data is 0" has been added to the 6.1-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    RDMA/hns: Fix shift-out-bounds when max_inline_data is 0

to the 6.1-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     rdma-hns-fix-shift-out-bounds-when-max_inline_data-i.patch
and it can be found in the queue-6.1 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b00ea5828251afa37c3a2c9f7bbad80fcd8ab009
Author: Chengchang Tang <tangchengchang@xxxxxxxxxx>
Date:   Wed Jul 10 21:37:02 2024 +0800

    RDMA/hns: Fix shift-out-bounds when max_inline_data is 0
    
    [ Upstream commit 24c6291346d98c7ece4f4bfeb5733bec1d6c7b4f ]
    
    A shift-out-bounds may occur, if the max_inline_data has not been set.
    
    The related log:
    UBSAN: shift-out-of-bounds in kernel/include/linux/log2.h:57:13
    shift exponent 64 is too large for 64-bit type 'long unsigned int'
    Call trace:
     dump_backtrace+0xb0/0x118
     show_stack+0x20/0x38
     dump_stack_lvl+0xbc/0x120
     dump_stack+0x1c/0x28
     __ubsan_handle_shift_out_of_bounds+0x104/0x240
     set_ext_sge_param+0x40c/0x420 [hns_roce_hw_v2]
     hns_roce_create_qp+0xf48/0x1c40 [hns_roce_hw_v2]
     create_qp.part.0+0x294/0x3c0
     ib_create_qp_kernel+0x7c/0x150
     create_mad_qp+0x11c/0x1e0
     ib_mad_init_device+0x834/0xc88
     add_client_context+0x248/0x318
     enable_device_and_get+0x158/0x280
     ib_register_device+0x4ac/0x610
     hns_roce_init+0x890/0xf98 [hns_roce_hw_v2]
     __hns_roce_hw_v2_init_instance+0x398/0x720 [hns_roce_hw_v2]
     hns_roce_hw_v2_init_instance+0x108/0x1e0 [hns_roce_hw_v2]
     hclge_init_roce_client_instance+0x1a0/0x358 [hclge]
     hclge_init_client_instance+0xa0/0x508 [hclge]
     hnae3_register_client+0x18c/0x210 [hnae3]
     hns_roce_hw_v2_init+0x28/0xff8 [hns_roce_hw_v2]
     do_one_initcall+0xe0/0x510
     do_init_module+0x110/0x370
     load_module+0x2c6c/0x2f20
     init_module_from_file+0xe0/0x140
     idempotent_init_module+0x24c/0x350
     __arm64_sys_finit_module+0x88/0xf8
     invoke_syscall+0x68/0x1a0
     el0_svc_common.constprop.0+0x11c/0x150
     do_el0_svc+0x38/0x50
     el0_svc+0x50/0xa0
     el0t_64_sync_handler+0xc0/0xc8
     el0t_64_sync+0x1a4/0x1a8
    
    Fixes: 0c5e259b06a8 ("RDMA/hns: Fix incorrect sge nums calculation")
    Signed-off-by: Chengchang Tang <tangchengchang@xxxxxxxxxx>
    Signed-off-by: Junxian Huang <huangjunxian6@xxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240710133705.896445-6-huangjunxian6@xxxxxxxxxxxxx
    Signed-off-by: Leon Romanovsky <leon@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/infiniband/hw/hns/hns_roce_qp.c b/drivers/infiniband/hw/hns/hns_roce_qp.c
index 7b79e6b3f3baa..c97b5dba17728 100644
--- a/drivers/infiniband/hw/hns/hns_roce_qp.c
+++ b/drivers/infiniband/hw/hns/hns_roce_qp.c
@@ -538,13 +538,15 @@ static unsigned int get_sge_num_from_max_inl_data(bool is_ud_or_gsi,
 {
 	unsigned int inline_sge;
 
-	inline_sge = roundup_pow_of_two(max_inline_data) / HNS_ROCE_SGE_SIZE;
+	if (!max_inline_data)
+		return 0;
 
 	/*
 	 * if max_inline_data less than
 	 * HNS_ROCE_SGE_IN_WQE * HNS_ROCE_SGE_SIZE,
 	 * In addition to ud's mode, no need to extend sge.
 	 */
+	inline_sge = roundup_pow_of_two(max_inline_data) / HNS_ROCE_SGE_SIZE;
 	if (!is_ud_or_gsi && inline_sge <= HNS_ROCE_SGE_IN_WQE)
 		inline_sge = 0;
 




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux