• Eli Cohen's avatar
    IB/uverbs: Protect QP multicast list · e214a0fe
    Eli Cohen authored
    Userspace verbs multicast attach/detach operations on a QP are done
    while holding the rwsem of the QP for reading.  That's not sufficient
    since a reader lock allows more than one reader to acquire the
    lock.  However, multicast attach/detach does list manipulation that
    can corrupt the list if multiple threads run in parallel.
    
    Fix this by acquiring the rwsem as a writer to serialize attach/detach
    operations.  Add idr_write_qp() and put_qp_write() to encapsulate
    this.
    
    This fixes oops seen when running applications that perform multicast
    joins/leaves.
    
    Reported by: Mike Dubman <miked@mellanox.com>
    Signed-off-by: default avatarEli Cohen <eli@mellanox.com>
    Cc: <stable@kernel.org>
    Signed-off-by: default avatarRoland Dreier <roland@purestorage.com>
    e214a0fe
uverbs_cmd.c 65.9 KB