diff options
author | Rich Lane <rlane@bigswitch.com> | 2013-02-19 11:10:30 -0800 |
---|---|---|
committer | Jesse Gross <jesse@nicira.com> | 2013-02-22 17:02:28 -0800 |
commit | 17b682a04841233f827073b327c6533e478dfcd4 (patch) | |
tree | 8ae17d165f5cec82ccf3d5a012c6fca3d585100f /net | |
parent | a15ff76c955d17cf58313097e4a24124da022b1d (diff) | |
download | linux-stable-17b682a04841233f827073b327c6533e478dfcd4.tar.gz linux-stable-17b682a04841233f827073b327c6533e478dfcd4.tar.bz2 linux-stable-17b682a04841233f827073b327c6533e478dfcd4.zip |
openvswitch: Fix parsing invalid LLC/SNAP ethertypes
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>
Diffstat (limited to 'net')
-rw-r--r-- | net/openvswitch/flow.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/net/openvswitch/flow.c b/net/openvswitch/flow.c index c3294cebc4f2..0c98d406124b 100644 --- a/net/openvswitch/flow.c +++ b/net/openvswitch/flow.c @@ -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, |