gro: Fix frag_list merging on imprecisely split packets
[pandora-kernel.git] / net / core / dev.c
index 220f52a..247f161 100644 (file)
@@ -2288,6 +2288,8 @@ ncls:
        if (!skb)
                goto out;
 
+       skb_orphan(skb);
+
        type = skb->protocol;
        list_for_each_entry_rcu(ptype,
                        &ptype_base[ntohs(type) & PTYPE_HASH_MASK], list) {
@@ -2389,7 +2391,8 @@ void *skb_gro_header(struct sk_buff *skb, unsigned int hlen)
                return pskb_may_pull(skb, hlen) ? skb->data + offset : NULL;
 
        return page_address(skb_shinfo(skb)->frags[0].page) +
-              skb_shinfo(skb)->frags[0].page_offset + offset;
+              skb_shinfo(skb)->frags[0].page_offset +
+              offset - skb_headlen(skb);
 }
 EXPORT_SYMBOL(skb_gro_header);