af_rxrpc: Remove incorrect checksum calculation from rxrpc_recvmsg()
The UDP checksum was already verified in rxrpc_data_ready() - which calls skb_checksum_complete() - as the RxRPC packet header contains no checksum of its own. Subsequent calls to skb_copy_and_csum_datagram_iovec() are thus redundant and are, in any case, being passed only a subset of the UDP payload - so the checksum will always fail if that path is taken. So there is no need to check skb->ip_summed in rxrpc_recvmsg(), and no need for the csum_copy_error: exit path. Signed-off-by: Tim Smith <tim@electronghost.co.uk> Signed-off-by: David Howells <dhowells@redhat.com>
This commit is contained in:
Родитель
38dbfb59d1
Коммит
8961749e5f
|
@ -180,16 +180,7 @@ int rxrpc_recvmsg(struct kiocb *iocb, struct socket *sock,
|
|||
if (copy > len - copied)
|
||||
copy = len - copied;
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_UNNECESSARY ||
|
||||
skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
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;
|
||||
|
@ -348,20 +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);
|
||||
if (!(flags & MSG_PEEK)) {
|
||||
if (skb_dequeue(&rx->sk.sk_receive_queue) != skb)
|
||||
BUG();
|
||||
}
|
||||
skb_kill_datagram(&rx->sk, skb, flags);
|
||||
rxrpc_put_call(call);
|
||||
return -EAGAIN;
|
||||
|
||||
wait_interrupted:
|
||||
ret = sock_intr_errno(timeo);
|
||||
wait_error:
|
||||
|
|
Загрузка…
Ссылка в новой задаче