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:
parent
8d5930dfb7
commit
3ea7ca80d9
|
@ -376,15 +376,15 @@ static void icmp_push_reply(struct icmp_bxm *icmp_param,
|
|||
ip_flush_pending_frames(sk);
|
||||
} else if ((skb = skb_peek(&sk->sk_write_queue)) != NULL) {
|
||||
struct icmphdr *icmph = icmp_hdr(skb);
|
||||
__wsum csum = 0;
|
||||
__wsum csum;
|
||||
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) {
|
||||
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);
|
||||
skb->ip_summed = CHECKSUM_NONE;
|
||||
ip_push_pending_frames(sk, fl4);
|
||||
|
|
Loading…
Reference in New Issue