Patch "skbuff: Fix skb checksum partial check." has been added to the 3.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
skbuff: Fix skb checksum partial check.
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
skbuff-fix-skb-checksum-partial-check.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Oct 22 17:25:59 PDT 2015
From: Pravin B Shelar <[email protected]>
Date: Mon, 28 Sep 2015 17:24:25 -0700
Subject: skbuff: Fix skb checksum partial check.
From: Pravin B Shelar <[email protected]>
[ Upstream commit 31b33dfb0a144469dd805514c9e63f4993729a48 ]
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.
--- include/linux/skbuff.h | 2 +- net/core/skbuff.c | 9 +++++---- 2 files changed, 6 insertions(+), 5 deletions(-)
include/linux/skbuff.h +1 -1
@@ -2348,7 +2348,7 @@ static inline void skb_postpull_rcsum(stif (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 ; }
net/core/skbuff.c +5 -4
@@ -2862,11 +2862,12 @@ EXPORT_SYMBOL(skb_append_datato_frags);*/ unsigned char *skb_pull_rcsum (struct sk_buff *skb,unsigned int len) { +unsigned char *data = skb->data; +BUG_ON (len > skb->len); - skb->len -= len; -BUG_ON (skb->len < skb->data_len); -skb_postpull_rcsum (skb, skb->data, len); -return skb->data += len; +__skb_pull (skb, len); +skb_postpull_rcsum (skb, data, len); +return skb->data; }EXPORT_SYMBOL_GPL (skb_pull_rcsum);
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/skbuff-fix-skb-checksum-flag-on-skb-pull.patch queue-3.14/skbuff-fix-skb-checksum-partial-check.patch