• Bob Pearson's avatar
    RDMA/rxe: Stop lookup of partially built objects · 215d0a75
    Bob Pearson authored
    Currently the rdma_rxe driver has a security weakness due to giving
    objects which are partially initialized indices allowing external actors
    to gain access to them by sending packets which refer to their
    index (e.g. qpn, rkey, etc) causing unpredictable results.
    
    This patch adds a new API rxe_finalize(obj) which enables looking up pool
    objects from indices using rxe_pool_get_index() for AH, QP, MR, and
    MW. They are added in create verbs only after the objects are fully
    initialized.
    
    It also adds wait for completion to destroy/dealloc verbs to assure that
    all references have been dropped before returning to rdma_core by
    implementing a new rxe_pool API rxe_cleanup() which drops a reference to
    the object and then waits for all other references to be dropped.  When
    the last reference is dropped the object is completed by kref.  After that
    it cleans up the object and if locally allocated frees the memory. In the
    special case of address handle objects the delay is implemented separately
    if the destroy_ah call is not sleepable.
    
    Combined with deferring cleanup code to type specific cleanup routines
    this allows all pending activity referring to objects to complete before
    returning to rdma_core.
    
    Link: https://lore.kernel.org/r/20220612223434.31462-2-rpearsonhpe@gmail.comSigned-off-by: default avatarBob Pearson <rpearsonhpe@gmail.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    215d0a75
rxe_pool.h 2.25 KB