openvswitch: Fix for force/commit action failures
authorGreg Rose <gvrose8192@gmail.com>
Fri, 14 Jul 2017 19:42:49 +0000 (12:42 -0700)
committerDavid S. Miller <davem@davemloft.net>
Sat, 15 Jul 2017 21:40:21 +0000 (14:40 -0700)
commit8b97ac5bda17cfaa257bcab6180af0f43a2e87e0
tree391a4203f636d166f68f67c5301f5a957d9ff3e1
parentb1f5bfc27a19f214006b9b4db7b9126df2dfdf5a
openvswitch: Fix for force/commit action failures

When there is an established connection in direction A->B, it is
possible to receive a packet on port B which then executes
ct(commit,force) without first performing ct() - ie, a lookup.
In this case, we would expect that this packet can delete the existing
entry so that we can commit a connection with direction B->A. However,
currently we only perform a check in skb_nfct_cached() for whether
OVS_CS_F_TRACKED is set and OVS_CS_F_INVALID is not set, ie that a
lookup previously occurred. In the above scenario, a lookup has not
occurred but we should still be able to statelessly look up the
existing entry and potentially delete the entry if it is in the
opposite direction.

This patch extends the check to also hint that if the action has the
force flag set, then we will lookup the existing entry so that the
force check at the end of skb_nfct_cached has the ability to delete
the connection.

Fixes: dd41d330b03 ("openvswitch: Add force commit.")
CC: Pravin Shelar <pshelar@nicira.com>
CC: dev@openvswitch.org
Signed-off-by: Joe Stringer <joe@ovn.org>
Signed-off-by: Greg Rose <gvrose8192@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/openvswitch/conntrack.c