|
@@ -760,7 +760,7 @@ int skb_copy_and_csum_datagram_msg(struct sk_buff *skb,
|
|
|
|
|
|
if (msg_data_left(msg) < chunk) {
|
|
|
if (__skb_checksum_complete(skb))
|
|
|
- goto csum_error;
|
|
|
+ return -EINVAL;
|
|
|
if (skb_copy_datagram_msg(skb, hlen, msg, chunk))
|
|
|
goto fault;
|
|
|
} else {
|
|
@@ -768,15 +768,16 @@ int skb_copy_and_csum_datagram_msg(struct sk_buff *skb,
|
|
|
if (skb_copy_and_csum_datagram(skb, hlen, &msg->msg_iter,
|
|
|
chunk, &csum))
|
|
|
goto fault;
|
|
|
- if (csum_fold(csum))
|
|
|
- goto csum_error;
|
|
|
+
|
|
|
+ if (csum_fold(csum)) {
|
|
|
+ iov_iter_revert(&msg->msg_iter, chunk);
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
if (unlikely(skb->ip_summed == CHECKSUM_COMPLETE))
|
|
|
netdev_rx_csum_fault(skb->dev);
|
|
|
}
|
|
|
return 0;
|
|
|
-csum_error:
|
|
|
- iov_iter_revert(&msg->msg_iter, chunk);
|
|
|
- return -EINVAL;
|
|
|
fault:
|
|
|
return -EFAULT;
|
|
|
}
|