From 1cc5f24fad85ea9859a9f45d9d5361731bd0f098 Mon Sep 17 00:00:00 2001 From: James Morris Date: Thu, 3 Jun 2004 23:58:09 -0700 Subject: [PATCH] [IPVS]: IPVS needs checksum fixups. Here's an additional patch for ipvs, which also mangles packets via netfilter and was previously depending on the checksum helper in nf_hook_slow(). Signed-of-by: James Morris Signed-of-by: David S. Miller --- net/ipv4/ipvs/ip_vs_core.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/net/ipv4/ipvs/ip_vs_core.c b/net/ipv4/ipvs/ip_vs_core.c index a3aa6410709a6..9f4b94f0768da 100644 --- a/net/ipv4/ipvs/ip_vs_core.c +++ b/net/ipv4/ipvs/ip_vs_core.c @@ -735,6 +735,13 @@ ip_vs_out(unsigned int hooknum, struct sk_buff **pskb, if (skb->nfcache & NFC_IPVS_PROPERTY) return NF_ACCEPT; + if (skb->ip_summed == CHECKSUM_HW) { + if (skb_checksum_help(pskb, (out == NULL))) + return NF_DROP; + if (skb != *pskb) + skb = *pskb; + } + iph = skb->nh.iph; if (unlikely(iph->protocol == IPPROTO_ICMP)) { int related, verdict = ip_vs_out_icmp(pskb, &related); @@ -974,6 +981,13 @@ ip_vs_in(unsigned int hooknum, struct sk_buff **pskb, return NF_ACCEPT; } + if (skb->ip_summed == CHECKSUM_HW) { + if (skb_checksum_help(pskb, (out == NULL))) + return NF_DROP; + if (skb != *pskb) + skb = *pskb; + } + iph = skb->nh.iph; if (unlikely(iph->protocol == IPPROTO_ICMP)) { int related, verdict = ip_vs_in_icmp(pskb, &related); -- 2.53.0