Commit 62974663fe (datapath/flow_netlink: Create right mask with disabled megaflows) introduced the bug which caused ovs_nla_get_match() returns immediately after parsing the flow mask for OVS_KEY_ATTR_ENCAP. Consequently, when vlan encapsulated packets are present, the corresponding datapath flows will have incorrect mask like below. And the incorrect flows could affect other non-vlan packets.
~/ovs# ovs-dpctl dump-flows in_port(3/0xffff0000),eth_type(0x8100),encap(), packets:0, bytes:0, used:never, actions:2 This commit fixes the bug by checking and handling the return value of the parsing function correctly. Signed-off-by: Alex Wang <al...@nicira.com> --- datapath/flow_netlink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/datapath/flow_netlink.c b/datapath/flow_netlink.c index 5f975a1..445fa88 100644 --- a/datapath/flow_netlink.c +++ b/datapath/flow_netlink.c @@ -938,7 +938,8 @@ int ovs_nla_get_match(struct sw_flow_match *match, mask_attrs &= ~(1ULL << OVS_KEY_ATTR_ETHERTYPE); encap = a[OVS_KEY_ATTR_ENCAP]; err = parse_flow_mask_nlattrs(encap, a, &mask_attrs); - goto free_newmask; + if (err) + goto free_newmask; } else { OVS_NLERR("VLAN frames must have an exact match on the TPID (mask=%x).\n", ntohs(eth_type)); -- 1.7.9.5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev