openvswitch: Fix parsing invalid LLC/SNAP ethertypes
authorRich Lane <rlane@bigswitch.com>
Tue, 19 Feb 2013 19:10:30 +0000 (11:10 -0800)
committerJesse Gross <jesse@nicira.com>
Sat, 23 Feb 2013 01:02:28 +0000 (17:02 -0800)
Before this patch, if an LLC/SNAP packet with OUI 00:00:00 had an
ethertype less than 1536 the flow key given to userspace in the upcall
would contain the invalid ethertype (for example, 3). If userspace
attempted to insert a kernel flow for this key it would be rejected
by ovs_flow_from_nlattrs.

This patch allows OVS to pass the OFTest pktact.DirectBadLlcPackets.

Signed-off-by: Rich Lane <rlane@bigswitch.com>
Signed-off-by: Jesse Gross <jesse@nicira.com>
net/openvswitch/flow.c

index c3294cebc4f2d8bb56182004145eac444fbc2908..0c98d406124b8793c705d1a1271f45c8e6a80d05 100644 (file)
@@ -484,7 +484,11 @@ static __be16 parse_ethertype(struct sk_buff *skb)
                return htons(ETH_P_802_2);
 
        __skb_pull(skb, sizeof(struct llc_snap_hdr));
-       return llc->ethertype;
+
+       if (ntohs(llc->ethertype) >= 1536)
+               return llc->ethertype;
+
+       return htons(ETH_P_802_2);
 }
 
 static int parse_icmpv6(struct sk_buff *skb, struct sw_flow_key *key,
This page took 0.04092 seconds and 5 git commands to generate.