rxrpc: Fix the return value of rxrpc_new_incoming_call()
authorDavid Howells <dhowells@redhat.com>
Thu, 15 Dec 2022 16:20:55 +0000 (16:20 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 19 Dec 2022 09:51:31 +0000 (09:51 +0000)
Dan Carpenter sayeth[1]:

  The patch 5e6ef4f1017c: "rxrpc: Make the I/O thread take over the
  call and local processor work" from Jan 23, 2020, leads to the
  following Smatch static checker warning:

net/rxrpc/io_thread.c:283 rxrpc_input_packet()
warn: bool is not less than zero.

Fix this (for now) by changing rxrpc_new_incoming_call() to return an int
with 0 or error code rather than bool.  Note that the actual return value
of rxrpc_input_packet() is currently ignored.  I have a separate patch to
clean that up.

Fixes: 5e6ef4f1017c ("rxrpc: Make the I/O thread take over the call and local processor work")
Reported-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: David Howells <dhowells@redhat.com>
cc: Marc Dionne <marc.dionne@auristor.com>
cc: linux-afs@lists.infradead.org
Link: http://lists.infradead.org/pipermail/linux-afs/2022-December/006123.html
Signed-off-by: David S. Miller <davem@davemloft.net>
net/rxrpc/ar-internal.h
net/rxrpc/call_accept.c
net/rxrpc/io_thread.c

index 5b732a4af009b9980e29931b19317e8b6a22751e..18092526d3c8291831bd1b9438d4f713eee48f10 100644 (file)
@@ -812,9 +812,9 @@ extern struct workqueue_struct *rxrpc_workqueue;
  */
 int rxrpc_service_prealloc(struct rxrpc_sock *, gfp_t);
 void rxrpc_discard_prealloc(struct rxrpc_sock *);
-bool rxrpc_new_incoming_call(struct rxrpc_local *, struct rxrpc_peer *,
-                            struct rxrpc_connection *, struct sockaddr_rxrpc *,
-                            struct sk_buff *);
+int rxrpc_new_incoming_call(struct rxrpc_local *, struct rxrpc_peer *,
+                           struct rxrpc_connection *, struct sockaddr_rxrpc *,
+                           struct sk_buff *);
 void rxrpc_accept_incoming_calls(struct rxrpc_local *);
 int rxrpc_user_charge_accept(struct rxrpc_sock *, unsigned long);
 
index d1850863507f079bcb0c3f1855ef5439e8a4ee52..c02401656fa981dad5ef2eefb3c49a3fdda8b4c2 100644 (file)
@@ -326,11 +326,11 @@ static struct rxrpc_call *rxrpc_alloc_incoming_call(struct rxrpc_sock *rx,
  * If we want to report an error, we mark the skb with the packet type and
  * abort code and return false.
  */
-bool rxrpc_new_incoming_call(struct rxrpc_local *local,
-                            struct rxrpc_peer *peer,
-                            struct rxrpc_connection *conn,
-                            struct sockaddr_rxrpc *peer_srx,
-                            struct sk_buff *skb)
+int rxrpc_new_incoming_call(struct rxrpc_local *local,
+                           struct rxrpc_peer *peer,
+                           struct rxrpc_connection *conn,
+                           struct sockaddr_rxrpc *peer_srx,
+                           struct sk_buff *skb)
 {
        const struct rxrpc_security *sec = NULL;
        struct rxrpc_skb_priv *sp = rxrpc_skb(skb);
@@ -342,7 +342,7 @@ bool rxrpc_new_incoming_call(struct rxrpc_local *local,
        /* Don't set up a call for anything other than the first DATA packet. */
        if (sp->hdr.seq != 1 ||
            sp->hdr.type != RXRPC_PACKET_TYPE_DATA)
-               return true; /* Just discard */
+               return 0; /* Just discard */
 
        rcu_read_lock();
 
@@ -413,7 +413,7 @@ bool rxrpc_new_incoming_call(struct rxrpc_local *local,
        _leave(" = %p{%d}", call, call->debug_id);
        rxrpc_input_call_event(call, skb);
        rxrpc_put_call(call, rxrpc_call_put_input);
-       return true;
+       return 0;
 
 unsupported_service:
        trace_rxrpc_abort(0, "INV", sp->hdr.cid, sp->hdr.callNumber, sp->hdr.seq,
@@ -425,10 +425,10 @@ no_call:
 reject:
        rcu_read_unlock();
        _leave(" = f [%u]", skb->mark);
-       return false;
+       return -EPROTO;
 discard:
        rcu_read_unlock();
-       return true;
+       return 0;
 }
 
 /*
index e6b9f0ceae17c6453c385630038c077da3d0ae80..1ad067d66fb6040f1f1a14028b918d23b0682cba 100644 (file)
@@ -292,7 +292,7 @@ protocol_error:
        skb->mark = RXRPC_SKB_MARK_REJECT_ABORT;
 reject_packet:
        rxrpc_reject_packet(local, skb);
-       return ret;
+       return 0;
 }
 
 /*
@@ -384,7 +384,7 @@ static int rxrpc_input_packet_on_conn(struct rxrpc_connection *conn,
                if (rxrpc_to_client(sp))
                        goto bad_message;
                if (rxrpc_new_incoming_call(conn->local, conn->peer, conn,
-                                           peer_srx, skb))
+                                           peer_srx, skb) == 0)
                        return 0;
                goto reject_packet;
        }