SUNRPC: Ensure the transport backchannel association
authorBenjamin Coddington <bcodding@redhat.com>
Mon, 22 Mar 2021 18:37:01 +0000 (14:37 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 5 Apr 2021 13:04:21 +0000 (09:04 -0400)
If the server sends CB_ calls on a connection that is not associated
with the backchannel, refuse to process the call and shut down the
connection.  This avoids a NULL dereference crash in
xprt_complete_bc_request().  There's not much more we can do in this
situation unless we want to look into allowing all connections to be
associated with the fore and back channel.

Signed-off-by: Benjamin Coddington <bcodding@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
net/sunrpc/xprtsock.c

index a64f5ed..47aa47a 100644 (file)
@@ -558,6 +558,10 @@ xs_read_stream_call(struct sock_xprt *transport, struct msghdr *msg, int flags)
        struct rpc_rqst *req;
        ssize_t ret;
 
+       /* Is this transport associated with the backchannel? */
+       if (!xprt->bc_serv)
+               return -ESHUTDOWN;
+
        /* Look up and lock the request corresponding to the given XID */
        req = xprt_lookup_bc_request(xprt, transport->recv.xid);
        if (!req) {