diff options
Diffstat (limited to 'net/core/skbuff.c')
-rw-r--r-- | net/core/skbuff.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/net/core/skbuff.c b/net/core/skbuff.c index ef2cd5712098..40796b8bf820 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c | |||
@@ -5083,7 +5083,8 @@ EXPORT_SYMBOL_GPL(skb_gso_validate_mac_len); | |||
5083 | 5083 | ||
5084 | static struct sk_buff *skb_reorder_vlan_header(struct sk_buff *skb) | 5084 | static struct sk_buff *skb_reorder_vlan_header(struct sk_buff *skb) |
5085 | { | 5085 | { |
5086 | int mac_len; | 5086 | int mac_len, meta_len; |
5087 | void *meta; | ||
5087 | 5088 | ||
5088 | if (skb_cow(skb, skb_headroom(skb)) < 0) { | 5089 | if (skb_cow(skb, skb_headroom(skb)) < 0) { |
5089 | kfree_skb(skb); | 5090 | kfree_skb(skb); |
@@ -5095,6 +5096,13 @@ static struct sk_buff *skb_reorder_vlan_header(struct sk_buff *skb) | |||
5095 | memmove(skb_mac_header(skb) + VLAN_HLEN, skb_mac_header(skb), | 5096 | memmove(skb_mac_header(skb) + VLAN_HLEN, skb_mac_header(skb), |
5096 | mac_len - VLAN_HLEN - ETH_TLEN); | 5097 | mac_len - VLAN_HLEN - ETH_TLEN); |
5097 | } | 5098 | } |
5099 | |||
5100 | meta_len = skb_metadata_len(skb); | ||
5101 | if (meta_len) { | ||
5102 | meta = skb_metadata_end(skb) - meta_len; | ||
5103 | memmove(meta + VLAN_HLEN, meta, meta_len); | ||
5104 | } | ||
5105 | |||
5098 | skb->mac_header += VLAN_HLEN; | 5106 | skb->mac_header += VLAN_HLEN; |
5099 | return skb; | 5107 | return skb; |
5100 | } | 5108 | } |