From 6c718bc79644bd4503eb7945aaad43fe578a896a Mon Sep 17 00:00:00 2001 From: Patrick McHardy Date: Sat, 20 Aug 2005 17:39:15 -0700 Subject: [PATCH] --- yaml --- r: 5913 b: refs/heads/master c: f93592ff4fa4a55aa7640d435fa93338e190294d h: refs/heads/master i: 5911: 6578bee69f1fe3db96219d2a188c22fccba6f8a0 v: v3 --- [refs] | 2 +- trunk/net/ipv4/netfilter/ipt_ECN.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index d8392d4f2ffe..032939143376 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: fd841326d73096ad79be9c3fa348f9ad04541cc2 +refs/heads/master: f93592ff4fa4a55aa7640d435fa93338e190294d diff --git a/trunk/net/ipv4/netfilter/ipt_ECN.c b/trunk/net/ipv4/netfilter/ipt_ECN.c index d3250a3a5db4..94a0ce1c1c9d 100644 --- a/trunk/net/ipv4/netfilter/ipt_ECN.c +++ b/trunk/net/ipv4/netfilter/ipt_ECN.c @@ -71,6 +71,10 @@ set_ect_tcp(struct sk_buff **pskb, const struct ipt_ECN_info *einfo, int inward) return 0; tcph = (void *)(*pskb)->nh.iph + (*pskb)->nh.iph->ihl*4; + if ((*pskb)->ip_summed == CHECKSUM_HW && + skb_checksum_help(*pskb, inward)) + return 0; + diffs[0] = ((u_int16_t *)tcph)[6]; if (einfo->operation & IPT_ECN_OP_SET_ECE) tcph->ece = einfo->proto.tcp.ece; @@ -79,13 +83,10 @@ set_ect_tcp(struct sk_buff **pskb, const struct ipt_ECN_info *einfo, int inward) diffs[1] = ((u_int16_t *)tcph)[6]; diffs[0] = diffs[0] ^ 0xFFFF; - if ((*pskb)->ip_summed != CHECKSUM_HW) + if ((*pskb)->ip_summed != CHECKSUM_UNNECESSARY) tcph->check = csum_fold(csum_partial((char *)diffs, sizeof(diffs), tcph->check^0xFFFF)); - else - if (skb_checksum_help(*pskb, inward)) - return 0; (*pskb)->nfcache |= NFC_ALTERED; return 1; }