• Bob Pearson's avatar
    RDMA/rxe: Fix ref count error in check_rkey() · b0068342
    Bob Pearson authored
    There is a reference count error in error path code and a potential race
    in check_rkey() in rxe_resp.c. When looking up the rkey for a memory
    window the reference to the mw from rxe_lookup_mw() is dropped before a
    reference is taken on the mr referenced by the mw. If the mr is destroyed
    immediately after the call to rxe_put(mw) the mr pointer is unprotected
    and may end up pointing at freed memory. The rxe_get(mr) call should take
    place before the rxe_put(mw) call.
    
    All errors in check_rkey() call rxe_put(mw) if mw is not NULL but it was
    already called after the above. The mw pointer should be set to NULL after
    the rxe_put(mw) call to prevent this from happening.
    
    Fixes: cdd0b856 ("RDMA/rxe: Implement memory access through MWs")
    Link: https://lore.kernel.org/r/20230517211509.1819998-1-rpearsonhpe@gmail.comSigned-off-by: default avatarBob Pearson <rpearsonhpe@gmail.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    b0068342
rxe_resp.c 39.2 KB