• Zhu Yanjun's avatar
    RDMA/rxe: Fix the use-before-initialization error of resp_pkts · 2a62b621
    Zhu Yanjun authored
    In the following:
    
      Call Trace:
       <TASK>
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
       assign_lock_key kernel/locking/lockdep.c:982 [inline]
       register_lock_class+0xdb6/0x1120 kernel/locking/lockdep.c:1295
       __lock_acquire+0x10a/0x5df0 kernel/locking/lockdep.c:4951
       lock_acquire kernel/locking/lockdep.c:5691 [inline]
       lock_acquire+0x1b1/0x520 kernel/locking/lockdep.c:5656
       __raw_spin_lock_irqsave include/linux/spinlock_api_smp.h:110 [inline]
       _raw_spin_lock_irqsave+0x3d/0x60 kernel/locking/spinlock.c:162
       skb_dequeue+0x20/0x180 net/core/skbuff.c:3639
       drain_resp_pkts drivers/infiniband/sw/rxe/rxe_comp.c:555 [inline]
       rxe_completer+0x250d/0x3cc0 drivers/infiniband/sw/rxe/rxe_comp.c:652
       rxe_qp_do_cleanup+0x1be/0x820 drivers/infiniband/sw/rxe/rxe_qp.c:761
       execute_in_process_context+0x3b/0x150 kernel/workqueue.c:3473
       __rxe_cleanup+0x21e/0x370 drivers/infiniband/sw/rxe/rxe_pool.c:233
       rxe_create_qp+0x3f6/0x5f0 drivers/infiniband/sw/rxe/rxe_verbs.c:583
    
    This is a use-before-initialization problem.
    
    It happens because rxe_qp_do_cleanup is called during error unwind before
    the struct has been fully initialized.
    
    Move the initialization of the skb earlier.
    
    Fixes: 8700e3e7 ("Soft RoCE driver")
    Link: https://lore.kernel.org/r/20230602035408.741534-1-yanjun.zhu@intel.com
    Reported-by: syzbot+eba589d8f49c73d356da@syzkaller.appspotmail.com
    Signed-off-by: default avatarZhu Yanjun <yanjun.zhu@linux.dev>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    2a62b621
rxe_qp.c 18.4 KB