| From a067f819d51c0e909860788a9e955e83b60c27f9 Mon Sep 17 00:00:00 2001 |
| From: Antonio Quartulli <ordex@autistici.org> |
| Date: Tue, 2 Oct 2012 06:14:17 +0000 |
| Subject: 8021q: fix mac_len recomputation in vlan_untag() |
| |
| |
| From: Antonio Quartulli <ordex@autistici.org> |
| |
| [ Upstream commit 5316cf9a5197eb80b2800e1acadde287924ca975 ] |
| |
| skb_reset_mac_len() relies on the value of the skb->network_header pointer, |
| therefore we must wait for such pointer to be recalculated before computing |
| the new mac_len value. |
| |
| Signed-off-by: Antonio Quartulli <ordex@autistici.org> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/8021q/vlan_core.c | 3 ++- |
| 1 file changed, 2 insertions(+), 1 deletion(-) |
| |
| --- a/net/8021q/vlan_core.c |
| +++ b/net/8021q/vlan_core.c |
| @@ -105,7 +105,6 @@ static struct sk_buff *vlan_reorder_head |
| return NULL; |
| memmove(skb->data - ETH_HLEN, skb->data - VLAN_ETH_HLEN, 2 * ETH_ALEN); |
| skb->mac_header += VLAN_HLEN; |
| - skb_reset_mac_len(skb); |
| return skb; |
| } |
| |
| @@ -139,6 +138,8 @@ struct sk_buff *vlan_untag(struct sk_buf |
| |
| skb_reset_network_header(skb); |
| skb_reset_transport_header(skb); |
| + skb_reset_mac_len(skb); |
| + |
| return skb; |
| |
| err_free: |