linux/net/openvswitch
Jesse Gross 6d2b5595b5 openvswitch: Zero flows on allocation.
commit ae5f2fb1d5 upstream.

When support for megaflows was introduced, OVS needed to start
installing flows with a mask applied to them. Since masking is an
expensive operation, OVS also had an optimization that would only
take the parts of the flow keys that were covered by a non-zero
mask. The values stored in the remaining pieces should not matter
because they are masked out.

While this works fine for the purposes of matching (which must always
look at the mask), serialization to netlink can be problematic. Since
the flow and the mask are serialized separately, the uninitialized
portions of the flow can be encoded with whatever values happen to be
present.

In terms of functionality, this has little effect since these fields
will be masked out by definition. However, it leaks kernel memory to
userspace, which is a potential security vulnerability. It is also
possible that other code paths could look at the masked key and get
uninitialized data, although this does not currently appear to be an
issue in practice.

This removes the mask optimization for flows that are being installed.
This was always intended to be the case as the mask optimizations were
really targetting per-packet flow operations.

Fixes: 03f0d916 ("openvswitch: Mega flow implementation")
Signed-off-by: Jesse Gross <jesse@nicira.com>
Acked-by: Pravin B Shelar <pshelar@nicira.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
[ luis: backported to 3.16: adjusted context ]
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
History 2015-09-30 13:20:58 +01:00
..
actions.c openvswitch: fix panic with multiple vlan headers 2014-10-15 12:05:27 +02:00
datapath.c openvswitch: Zero flows on allocation. 2015-09-30 13:20:58 +01:00
datapath.h openvswitch: Use net_ratelimit in OVS_NLERR 2014-05-16 13:40:28 -07:00
dp_notify.c genetlink: make multicast groups const, prevent abuse 2013-11-19 16:39:06 -05:00
flow.c openvswitch: Fix tracking of flags seen in TCP flows. 2014-06-29 14:10:51 -07:00
flow.h openvswitch: Fix tracking of flags seen in TCP flows. 2014-06-29 14:10:51 -07:00
flow_netlink.c openvswitch: Compact sw_flow_key. 2014-05-22 16:27:34 -07:00
flow_netlink.h openvswitch: Remove 5-tuple optimization. 2014-05-16 13:40:29 -07:00
flow_table.c openvswitch: Zero flows on allocation. 2015-09-30 13:20:58 +01:00
flow_table.h openvswitch: Zero flows on allocation. 2015-09-30 13:20:58 +01:00
Kconfig openvswitch: Add SCTP support 2013-08-26 14:03:13 -07:00
Makefile openvswitch: Restructure datapath.c and flow.c 2013-10-03 18:16:47 -07:00
vport-gre.c openvswitch: supply a dummy err_handler of gre_cisco_protocol to prevent kernel crash 2014-06-29 14:10:48 -07:00
vport-internal_dev.c net: get rid of SET_ETHTOOL_OPS 2014-05-13 17:43:20 -04:00
vport-internal_dev.h openvswitch: Replace Nicira Networks. 2012-05-03 18:55:23 -07:00
vport-netdev.c openvswitch: fix vport-netdev unregister 2013-10-16 14:50:22 -07:00
vport-netdev.h openvswitch: fix vport-netdev unregister 2013-10-16 14:50:22 -07:00
vport-vxlan.c vxlan: Add support for UDP checksums (v4 sending, v6 zero csums) 2014-06-04 22:46:39 -07:00
vport.c net: Replace u64_stats_fetch_begin_bh to u64_stats_fetch_begin_irq 2014-03-14 22:41:36 -04:00
vport.h openvswitch: Fix net exit. 2015-03-12 16:27:32 +00:00