With 802.1ad support these are parsed and set upfront by
parse_vlan_from_nlattrs() before ovs_key_from_nlattrs() is ever called.
As such we should never see a VLAN attribute in ovs_key_from_nlattrs().

Signed-off-by: Eric Garver <e...@erig.me>
---
 net/openvswitch/flow_netlink.c | 19 +++++--------------
 1 file changed, 5 insertions(+), 14 deletions(-)

diff --git a/net/openvswitch/flow_netlink.c b/net/openvswitch/flow_netlink.c
index fbe9e0e4792d..0f36aead744b 100644
--- a/net/openvswitch/flow_netlink.c
+++ b/net/openvswitch/flow_netlink.c
@@ -923,20 +923,11 @@ static int ovs_key_from_nlattrs(struct net *net, struct 
sw_flow_match *match,
        }
 
        if (attrs & (1 << OVS_KEY_ATTR_VLAN)) {
-               __be16 tci;
-
-               tci = nla_get_be16(a[OVS_KEY_ATTR_VLAN]);
-               if (!(tci & htons(VLAN_TAG_PRESENT))) {
-                       if (is_mask)
-                               OVS_NLERR(log, "VLAN TCI mask does not have 
exact match for VLAN_TAG_PRESENT bit.");
-                       else
-                               OVS_NLERR(log, "VLAN TCI does not have 
VLAN_TAG_PRESENT bit set.");
-
-                       return -EINVAL;
-               }
-
-               SW_FLOW_KEY_PUT(match, eth.vlan.tci, tci, is_mask);
-               attrs &= ~(1 << OVS_KEY_ATTR_VLAN);
+               /* VLAN attribute is always parsed before getting here since it 
may
+                * occur multiple times.
+                */
+               OVS_NLERR(log, "VLAN attribute unexpected.");
+               return -EINVAL;
        }
 
        if (attrs & (1 << OVS_KEY_ATTR_ETHERTYPE)) {
-- 
2.5.5

Reply via email to