rxrpc: Fix security setting propagation
authorDavid Howells <dhowells@redhat.com>
Thu, 15 Dec 2022 16:19:56 +0000 (16:19 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 19 Dec 2022 09:51:31 +0000 (09:51 +0000)
Fix the propagation of the security settings from sendmsg to the rxrpc_call
struct.

Fixes: f3441d4125fc ("rxrpc: Copy client call parameters into rxrpc_call earlier")
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
Signed-off-by: David S. Miller <davem@davemloft.net>
net/rxrpc/call_object.c
net/rxrpc/conn_client.c
net/rxrpc/security.c

index be5eb8c..89dcf60 100644 (file)
@@ -217,6 +217,7 @@ static struct rxrpc_call *rxrpc_alloc_client_call(struct rxrpc_sock *rx,
        call->tx_total_len      = p->tx_total_len;
        call->key               = key_get(cp->key);
        call->local             = rxrpc_get_local(cp->local, rxrpc_local_get_call);
+       call->security_level    = cp->security_level;
        if (p->kernel)
                __set_bit(RXRPC_CALL_KERNEL, &call->flags);
        if (cp->upgrade)
index a08e33c..87efa03 100644 (file)
@@ -551,8 +551,6 @@ static void rxrpc_activate_one_channel(struct rxrpc_connection *conn,
        call->conn      = rxrpc_get_connection(conn, rxrpc_conn_get_activate_call);
        call->cid       = conn->proto.cid | channel;
        call->call_id   = call_id;
-       call->security  = conn->security;
-       call->security_ix = conn->security_ix;
        call->dest_srx.srx_service = conn->service_id;
 
        trace_rxrpc_connect_call(call);
index 209f2c2..ab968f6 100644 (file)
@@ -67,13 +67,13 @@ const struct rxrpc_security *rxrpc_security_lookup(u8 security_index)
  */
 int rxrpc_init_client_call_security(struct rxrpc_call *call)
 {
-       const struct rxrpc_security *sec;
+       const struct rxrpc_security *sec = &rxrpc_no_security;
        struct rxrpc_key_token *token;
        struct key *key = call->key;
        int ret;
 
        if (!key)
-               return 0;
+               goto found;
 
        ret = key_validate(key);
        if (ret < 0)
@@ -88,7 +88,7 @@ int rxrpc_init_client_call_security(struct rxrpc_call *call)
 
 found:
        call->security = sec;
-       _leave(" = 0");
+       call->security_ix = sec->security_index;
        return 0;
 }