• Jack Morgenstein's avatar
    IB/core: Fix XRC race condition in ib_uverbs_open_qp · a040f95d
    Jack Morgenstein authored
    In ib_uverbs_open_qp, the sharable xrc target qp is created as a
    "pseudo" qp and added to a list of qp's sharing the same physical
    QP.  This is done before the "pseudo" qp is assigned a uobject.
    
    There is a race condition here if an async event arrives at the
    physical qp.  If the event is handled after the pseudo qp is added to
    the list, but before it is assigned a uobject, the kernel crashes in
    ib_uverbs_qp_event_handler, due to trying to dereference a NULL
    uobject pointer.
    
    Note that simply checking for non-NULL is not enough, due to error
    flows in ib_uverbs_open_qp.  If the failure is after assigning the
    uobject, but before the qp has fully been created, we still have a
    problem.
    
    Thus, in ib_uverbs_qp_event_handler, we test that the uobject is
    present, and also that it is live.
    Reported-by: default avatarMatthew Finlay <matt@mellanox.com>
    Signed-off-by: default avatarJack Morgenstein <jackm@dev.mellanox.co.il>
    Signed-off-by: default avatarOr Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    a040f95d
uverbs_main.c 27.1 KB