diff options
Diffstat (limited to 'net/core/skbuff.c')
| -rw-r--r-- | net/core/skbuff.c | 9 | 
1 files changed, 7 insertions, 2 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index d31bb36ae0d..d883dcc78b6 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -210,6 +210,7 @@ struct sk_buff *__alloc_skb(unsigned int size, gfp_t gfp_mask,  	shinfo = skb_shinfo(skb);  	memset(shinfo, 0, offsetof(struct skb_shared_info, dataref));  	atomic_set(&shinfo->dataref, 1); +	kmemcheck_annotate_variable(shinfo->destructor_arg);  	if (fclone) {  		struct sk_buff *child = skb + 1; @@ -2744,8 +2745,12 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb)  merge:  	if (offset > headlen) { -		skbinfo->frags[0].page_offset += offset - headlen; -		skbinfo->frags[0].size -= offset - headlen; +		unsigned int eat = offset - headlen; + +		skbinfo->frags[0].page_offset += eat; +		skbinfo->frags[0].size -= eat; +		skb->data_len -= eat; +		skb->len -= eat;  		offset = headlen;  	}  |