• Bob Pearson's avatar
    RDMA/rxe: Fix bug in rxe_alloc() · c4369575
    Bob Pearson authored
    A recent patch which added an 'unlocked' version of rxe_alloc introduced a
    bug causing kzalloc(..., GFP_KERNEL) to be called while holding a spin
    lock. This patch corrects that error.
    
    rxe_alloc_nl() should always be called while holding the pool->pool_lock
    so the 2nd argument to kzalloc there should be GFP_ATOMIC.
    
    rxe_alloc() prior to the change only locked the code around checking that
    pool->state is RXE_POOL_STATE_VALID to avoid races between working threads
    and a thread shutting down the rxe driver. This patch reverts rxe_alloc()
    to this behavior so the lock is not held when kzalloc() is called.
    
    Link: https://lore.kernel.org/r/20210125211641.2694-2-rpearson@hpe.com
    Reported-by: syzbot+ec2fd72374785d0e558e@syzkaller.appspotmail.com
    Fixes: 3853c35e
    
     ("RDMA/rxe: Add unlocked versions of pool APIs")
    Signed-off-by: default avatarBob Pearson <rpearson@hpe.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    c4369575
rxe_pool.c 12.4 KB