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>
This commit is contained in:
Rich Lane 2013-02-19 11:10:30 -08:00 committed by Jesse Gross
parent a15ff76c95
commit 17b682a048

View File

@ -484,7 +484,11 @@ static __be16 parse_ethertype(struct sk_buff *skb)
return htons(ETH_P_802_2); return htons(ETH_P_802_2);
__skb_pull(skb, sizeof(struct llc_snap_hdr)); __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, static int parse_icmpv6(struct sk_buff *skb, struct sw_flow_key *key,