Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fba91afb authored by Trond Myklebust's avatar Trond Myklebust
Browse files

SUNRPC: Fix an Oops due to socket not set up yet...



We can Oops in both xs_udp_send_request() and xs_tcp_send_request() if the
call to xs_sendpages() returns an error due to the socket not yet being
set up.
Deal with that situation by returning a new error: ENOTSOCK, so that we
know to avoid dereferencing transport->sock.

Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent d7371c41
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -467,7 +467,7 @@ static int xs_sendpages(struct socket *sock, struct sockaddr *addr, int addrlen,
	int err, sent = 0;

	if (unlikely(!sock))
		return -ENOTCONN;
		return -ENOTSOCK;

	clear_bit(SOCK_ASYNC_NOSPACE, &sock->flags);
	if (base != 0) {
@@ -594,6 +594,10 @@ static int xs_udp_send_request(struct rpc_task *task)
	}

	switch (status) {
	case -ENOTSOCK:
		status = -ENOTCONN;
		/* Should we call xs_close() here? */
		break;
	case -EAGAIN:
		xs_nospace(task);
		break;
@@ -693,6 +697,10 @@ static int xs_tcp_send_request(struct rpc_task *task)
	}

	switch (status) {
	case -ENOTSOCK:
		status = -ENOTCONN;
		/* Should we call xs_close() here? */
		break;
	case -EAGAIN:
		xs_nospace(task);
		break;