summaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
authorPravin B Shelar <pshelar@nicira.com>2015-09-28 17:24:25 -0700
committerLuis Henriques <luis.henriques@canonical.com>2015-10-28 10:33:18 +0000
commitfc3befaacb2c900d239c65562f253b95344448b0 (patch)
tree87571f455e4437a131d327fab170c0dc56984e91 /include/linux
parenta5162a04e7e2d84d133dde460f7e84c4a70656a9 (diff)
skbuff: Fix skb checksum partial check.
commit 31b33dfb0a144469dd805514c9e63f4993729a48 upstream. Earlier patch 6ae459bda tried to detect void ckecksum partial skb by comparing pull length to checksum offset. But it does not work for all cases since checksum-offset depends on updates to skb->data. Following patch fixes it by validating checksum start offset after skb-data pointer is updated. Negative value of checksum offset start means there is no need to checksum. Fixes: 6ae459bda ("skbuff: Fix skb checksum flag on skb pull") Reported-by: Andrew Vagin <avagin@odin.com> Signed-off-by: Pravin B Shelar <pshelar@nicira.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/skbuff.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index cfe9676d2e71..010bc80be91c 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -2439,7 +2439,7 @@ static inline void skb_postpull_rcsum(struct sk_buff *skb,
if (skb->ip_summed == CHECKSUM_COMPLETE)
skb->csum = csum_sub(skb->csum, csum_partial(start, len, 0));
else if (skb->ip_summed == CHECKSUM_PARTIAL &&
- skb_checksum_start_offset(skb) <= len)
+ skb_checksum_start_offset(skb) < 0)
skb->ip_summed = CHECKSUM_NONE;
}