SUNRPC: Fix Oops in xs_tcp_send_request() when transport is disconnected
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Mon, 17 May 2021 12:50:11 +0000 (08:50 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Thu, 20 May 2021 16:17:08 +0000 (12:17 -0400)
If a disconnection occurs while we're trying to reply to a server
callback, then we may end up calling xs_tcp_send_request() with a NULL
value for transport->inet, which trips up the call to
tcp_sock_set_cork().

Fixes: d737e5d41870 ("SUNRPC: Set TCP_CORK until the transmit queue is empty")
Cc: stable@vger.kernel.org
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
net/sunrpc/xprtsock.c

index 47aa47a..316d049 100644 (file)
@@ -1010,6 +1010,8 @@ static int xs_tcp_send_request(struct rpc_rqst *req)
                        kernel_sock_shutdown(transport->sock, SHUT_RDWR);
                return -ENOTCONN;
        }
+       if (!transport->inet)
+               return -ENOTCONN;
 
        xs_pktdump("packet data:",
                                req->rq_svec->iov_base,