• Sean Hefty's avatar
    RDMA/ucma: Don't report events with invalid user context · 0cefcf0b
    Sean Hefty authored
    There's a problem with how rdma cm events are reported to userspace
    that can lead to application crashes.
    
    When a new connection request arrives, a context for the connection is
    allocated in the kernel.  The connection event is then reported to
    userspace.  The userspace library retrieves the event and allocates
    its own context for the connection.  The userspace context is
    associated with the kernel's context when accepting.  This allows the
    kernel to give userspace context with other events.
    
    A problem occurs if a second event for the same connection occurs
    before the user has had a chance to call accept.  The userspace
    context has not yet been set, which causes the librdmacm to crash.
    (This has been seen when the app takes too long to call accept,
    resulting in the remote side timing out and rejecting the connection)
    
    Fix this by ignoring events for new connections until userspace has
    set their context.  This can only happen if an error occurs on a new
    connection before the user accepts it.  This is okay, since the accept
    will just fail later.
    Signed-off-by: default avatarSean Hefty <sean.hefty@intel.com>
    Signed-off-by: default avatarRoland Dreier <rolandd@cisco.com>
    0cefcf0b
ucma.c 20.4 KB