mirror of
https://github.com/tbsdtv/linux_media.git
synced 2025-07-23 12:43:29 +02:00
icmp_push_reply(): reorder adding the checksum up
do csum_partial_copy_nocheck() on the first fragment, then add the rest to it. Equivalent transformation. That was the only caller of csum_partial_copy_nocheck() that might pass it non-zero as the last argument. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -376,15 +376,15 @@ static void icmp_push_reply(struct icmp_bxm *icmp_param,
|
|||||||
ip_flush_pending_frames(sk);
|
ip_flush_pending_frames(sk);
|
||||||
} else if ((skb = skb_peek(&sk->sk_write_queue)) != NULL) {
|
} else if ((skb = skb_peek(&sk->sk_write_queue)) != NULL) {
|
||||||
struct icmphdr *icmph = icmp_hdr(skb);
|
struct icmphdr *icmph = icmp_hdr(skb);
|
||||||
__wsum csum = 0;
|
__wsum csum;
|
||||||
struct sk_buff *skb1;
|
struct sk_buff *skb1;
|
||||||
|
|
||||||
|
csum = csum_partial_copy_nocheck((void *)&icmp_param->data,
|
||||||
|
(char *)icmph,
|
||||||
|
icmp_param->head_len, 0);
|
||||||
skb_queue_walk(&sk->sk_write_queue, skb1) {
|
skb_queue_walk(&sk->sk_write_queue, skb1) {
|
||||||
csum = csum_add(csum, skb1->csum);
|
csum = csum_add(csum, skb1->csum);
|
||||||
}
|
}
|
||||||
csum = csum_partial_copy_nocheck((void *)&icmp_param->data,
|
|
||||||
(char *)icmph,
|
|
||||||
icmp_param->head_len, csum);
|
|
||||||
icmph->checksum = csum_fold(csum);
|
icmph->checksum = csum_fold(csum);
|
||||||
skb->ip_summed = CHECKSUM_NONE;
|
skb->ip_summed = CHECKSUM_NONE;
|
||||||
ip_push_pending_frames(sk, fl4);
|
ip_push_pending_frames(sk, fl4);
|
||||||
|
Reference in New Issue
Block a user