• S
    IB/cm: Bump reference count on cm_id before invoking callback · 29963437
    Sean Hefty 提交于
    When processing a SIDR REQ, the ib_cm allocates a new cm_id.  The
    refcount of the cm_id is initialized to 1.  However, cm_process_work
    will decrement the refcount after invoking all callbacks.  The result
    is that the cm_id will end up with refcount set to 0 by the end of the
    sidr req handler.
    
    If a user tries to destroy the cm_id, the destruction will proceed,
    under the incorrect assumption that no other threads are referencing
    the cm_id.  This can lead to a crash when the cm callback thread tries
    to access the cm_id.
    
    This problem was noticed as part of a larger investigation with kernel
    crashes in the rdma_cm when running on a real time OS.
    Signed-off-by: NSean Hefty <sean.hefty@intel.com>
    Acked-by: NDoug Ledford <dledford@redhat.com>
    Cc: <stable@kernel.org>
    Signed-off-by: NRoland Dreier <roland@purestorage.com>
    29963437
cm.c 106.0 KB