diff options
Diffstat (limited to 'net/rxrpc/ar-recvmsg.c')
| -rw-r--r-- | net/rxrpc/ar-recvmsg.c | 29 | 
1 files changed, 7 insertions, 22 deletions
diff --git a/net/rxrpc/ar-recvmsg.c b/net/rxrpc/ar-recvmsg.c index 4b48687c389..e9aaa65c077 100644 --- a/net/rxrpc/ar-recvmsg.c +++ b/net/rxrpc/ar-recvmsg.c @@ -143,10 +143,13 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,  		/* copy the peer address and timestamp */  		if (!continue_call) { -			if (msg->msg_name && msg->msg_namelen > 0) +			if (msg->msg_name) { +				size_t len = +					sizeof(call->conn->trans->peer->srx);  				memcpy(msg->msg_name, -				       &call->conn->trans->peer->srx, -				       sizeof(call->conn->trans->peer->srx)); +				       &call->conn->trans->peer->srx, len); +				msg->msg_namelen = len; +			}  			sock_recv_ts_and_drops(msg, &rx->sk, skb);  		} @@ -177,15 +180,7 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,  		if (copy > len - copied)  			copy = len - copied; -		if (skb->ip_summed == CHECKSUM_UNNECESSARY) { -			ret = skb_copy_datagram_iovec(skb, offset, -						      msg->msg_iov, copy); -		} else { -			ret = skb_copy_and_csum_datagram_iovec(skb, offset, -							       msg->msg_iov); -			if (ret == -EINVAL) -				goto csum_copy_error; -		} +		ret = skb_copy_datagram_iovec(skb, offset, msg->msg_iov, copy);  		if (ret < 0)  			goto copy_error; @@ -344,16 +339,6 @@ copy_error:  	_leave(" = %d", ret);  	return ret; -csum_copy_error: -	_debug("csum error"); -	release_sock(&rx->sk); -	if (continue_call) -		rxrpc_put_call(continue_call); -	rxrpc_kill_skb(skb); -	skb_kill_datagram(&rx->sk, skb, flags); -	rxrpc_put_call(call); -	return -EAGAIN; -  wait_interrupted:  	ret = sock_intr_errno(timeo);  wait_error:  | 
