rxrpc: Need to flag call as being released on connect failure
authorDavid Howells <dhowells@redhat.com>
Mon, 8 Aug 2016 12:06:41 +0000 (13:06 +0100)
committerDavid Howells <dhowells@redhat.com>
Tue, 9 Aug 2016 16:12:23 +0000 (17:12 +0100)
If rxrpc_new_client_call() fails to make a connection, the call record that
it allocated needs to be marked as RXRPC_CALL_RELEASED before it is passed
to rxrpc_put_call() to indicate that it no longer has any attachment to the
AF_RXRPC socket.

Without this, an assertion failure may occur at:

net/rxrpc/call_object:635

Signed-off-by: David Howells <dhowells@redhat.com>
net/rxrpc/call_object.c

index e8c953c48cb8f596a9dae299443f31f1e316ad0f..ae057e0740f3de43260d6f482818925ae7992cc8 100644 (file)
@@ -275,6 +275,7 @@ error:
        list_del_init(&call->link);
        write_unlock_bh(&rxrpc_call_lock);
 
+       set_bit(RXRPC_CALL_RELEASED, &call->flags);
        call->state = RXRPC_CALL_DEAD;
        rxrpc_put_call(call);
        _leave(" = %d", ret);
@@ -287,6 +288,7 @@ error:
         */
 found_user_ID_now_present:
        write_unlock(&rx->call_lock);
+       set_bit(RXRPC_CALL_RELEASED, &call->flags);
        call->state = RXRPC_CALL_DEAD;
        rxrpc_put_call(call);
        _leave(" = -EEXIST [%p]", call);