diff options
author | David Howells <dhowells@redhat.com> | 2017-10-20 19:01:22 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-10-22 05:05:39 +0300 |
commit | 6cb3ece9685f78f9b288dd2afea58c35784e40b8 (patch) | |
tree | 64c816bc23b70513cd8f44638d40486acbbc8fb2 /net/rxrpc | |
parent | 748759d57e1b33427113bad7dc685ea3c139649e (diff) | |
download | linux-6cb3ece9685f78f9b288dd2afea58c35784e40b8.tar.xz |
rxrpc: Don't release call mutex on error pointer
Don't release call mutex at the end of rxrpc_kernel_begin_call() if the
call pointer actually holds an error value.
Fixes: 540b1c48c37a ("rxrpc: Fix deadlock between call creation and sendmsg/recvmsg")
Reported-by: Marc Dionne <marc.dionne@auristor.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/rxrpc')
-rw-r--r-- | net/rxrpc/af_rxrpc.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/rxrpc/af_rxrpc.c b/net/rxrpc/af_rxrpc.c index fb17552fd292..4b0a8288c98a 100644 --- a/net/rxrpc/af_rxrpc.c +++ b/net/rxrpc/af_rxrpc.c @@ -308,10 +308,11 @@ struct rxrpc_call *rxrpc_kernel_begin_call(struct socket *sock, call = rxrpc_new_client_call(rx, &cp, srx, user_call_ID, tx_total_len, gfp); /* The socket has been unlocked. */ - if (!IS_ERR(call)) + if (!IS_ERR(call)) { call->notify_rx = notify_rx; + mutex_unlock(&call->user_mutex); + } - mutex_unlock(&call->user_mutex); _leave(" = %p", call); return call; } |