|
@@ -661,7 +661,8 @@ static void copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
|
|
|
/* {transport,network,mac}_header are relative to skb->head */
|
|
|
new->transport_header += offset;
|
|
|
new->network_header += offset;
|
|
|
- new->mac_header += offset;
|
|
|
+ if (skb_mac_header_was_set(new))
|
|
|
+ new->mac_header += offset;
|
|
|
#endif
|
|
|
skb_shinfo(new)->gso_size = skb_shinfo(old)->gso_size;
|
|
|
skb_shinfo(new)->gso_segs = skb_shinfo(old)->gso_segs;
|
|
@@ -843,7 +844,8 @@ int pskb_expand_head(struct sk_buff *skb, int nhead, int ntail,
|
|
|
skb->tail += off;
|
|
|
skb->transport_header += off;
|
|
|
skb->network_header += off;
|
|
|
- skb->mac_header += off;
|
|
|
+ if (skb_mac_header_was_set(skb))
|
|
|
+ skb->mac_header += off;
|
|
|
skb->csum_start += nhead;
|
|
|
skb->cloned = 0;
|
|
|
skb->hdr_len = 0;
|
|
@@ -935,7 +937,8 @@ struct sk_buff *skb_copy_expand(const struct sk_buff *skb,
|
|
|
#ifdef NET_SKBUFF_DATA_USES_OFFSET
|
|
|
n->transport_header += off;
|
|
|
n->network_header += off;
|
|
|
- n->mac_header += off;
|
|
|
+ if (skb_mac_header_was_set(skb))
|
|
|
+ n->mac_header += off;
|
|
|
#endif
|
|
|
|
|
|
return n;
|