summaryrefslogtreecommitdiffstats
path: root/net/openvswitch/vport.c
diff options
context:
space:
mode:
authorJiri Benc <jbenc@redhat.com>2016-10-10 17:02:43 +0200
committerDavid S. Miller <davem@davemloft.net>2016-10-13 16:03:23 +0200
commit72ec108d701506fa6cd2f66ec5b15ea71df3c464 (patch)
treebeb6ca2c112efd4ec175f6b51aeba5986c637315 /net/openvswitch/vport.c
parentopenvswitch: vlan: remove wrong likely statement (diff)
downloadlinux-72ec108d701506fa6cd2f66ec5b15ea71df3c464.tar.xz
linux-72ec108d701506fa6cd2f66ec5b15ea71df3c464.zip
openvswitch: fix vlan subtraction from packet length
When the packet has its vlan tag in skb->vlan_tci, the length of the VLAN header is not counted in skb->len. It doesn't make sense to subtract it. Fixes: 018c1dda5ff1 ("openvswitch: 802.1AD Flow handling, actions, vlan parsing, netlink attributes") Signed-off-by: Jiri Benc <jbenc@redhat.com> Acked-by: Pravin B Shelar <pshelar@ovn.org> Acked-by: Eric Garver <e@erig.me> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/openvswitch/vport.c')
-rw-r--r--net/openvswitch/vport.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/net/openvswitch/vport.c b/net/openvswitch/vport.c
index 8f198437c724..7387418ac514 100644
--- a/net/openvswitch/vport.c
+++ b/net/openvswitch/vport.c
@@ -485,7 +485,8 @@ static unsigned int packet_length(const struct sk_buff *skb)
{
unsigned int length = skb->len - ETH_HLEN;
- if (skb_vlan_tagged(skb))
+ if (!skb_vlan_tag_present(skb) &&
+ eth_type_vlan(skb->protocol))
length -= VLAN_HLEN;
/* Don't subtract for multiple VLAN tags. Most (all?) drivers allow