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 d31bb36ae0dc..d883dcc78b6b 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, | |||
210 | shinfo = skb_shinfo(skb); | 210 | shinfo = skb_shinfo(skb); |
211 | memset(shinfo, 0, offsetof(struct skb_shared_info, dataref)); | 211 | memset(shinfo, 0, offsetof(struct skb_shared_info, dataref)); |
212 | atomic_set(&shinfo->dataref, 1); | 212 | atomic_set(&shinfo->dataref, 1); |
213 | kmemcheck_annotate_variable(shinfo->destructor_arg); | ||
213 | 214 | ||
214 | if (fclone) { | 215 | if (fclone) { |
215 | struct sk_buff *child = skb + 1; | 216 | struct sk_buff *child = skb + 1; |
@@ -2744,8 +2745,12 @@ int skb_gro_receive(struct sk_buff **head, struct sk_buff *skb) | |||
2744 | 2745 | ||
2745 | merge: | 2746 | merge: |
2746 | if (offset > headlen) { | 2747 | if (offset > headlen) { |
2747 | skbinfo->frags[0].page_offset += offset - headlen; | 2748 | unsigned int eat = offset - headlen; |
2748 | skbinfo->frags[0].size -= offset - headlen; | 2749 | |
2750 | skbinfo->frags[0].page_offset += eat; | ||
2751 | skbinfo->frags[0].size -= eat; | ||
2752 | skb->data_len -= eat; | ||
2753 | skb->len -= eat; | ||
2749 | offset = headlen; | 2754 | offset = headlen; |
2750 | } | 2755 | } |
2751 | 2756 | ||