• David Howells's avatar
    rxrpc: Make it so that a waiting process can be aborted · 0eb362d2
    David Howells authored
    When sendmsg() creates an rxrpc call, it queues it to wait for a connection
    and channel to be assigned and then waits before it can start shovelling
    data as the encrypted DATA packet content includes a summary of the
    connection parameters.
    
    However, sendmsg() may get interrupted before a connection gets assigned
    and further sendmsg() calls will fail with EBUSY until an assignment is
    made.
    
    Fix this so that the call can at least be aborted without failing on
    EBUSY.  We have to be careful here as sendmsg() mustn't be allowed to start
    the call timer if the call doesn't yet have a connection assigned as an
    oops may follow shortly thereafter.
    
    Fixes: 540b1c48 ("rxrpc: Fix deadlock between call creation and sendmsg/recvmsg")
    Reported-by: default avatarMarc Dionne <marc.dionne@auristor.com>
    Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
    cc: "David S. Miller" <davem@davemloft.net>
    cc: Eric Dumazet <edumazet@google.com>
    cc: Jakub Kicinski <kuba@kernel.org>
    cc: Paolo Abeni <pabeni@redhat.com>
    cc: linux-afs@lists.infradead.org
    cc: netdev@vger.kernel.org
    cc: linux-kernel@vger.kernel.org
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    0eb362d2
sendmsg.c 20.5 KB