| From foo@baz Tue 03 Dec 2019 11:07:30 AM CET |
| From: Paolo Abeni <pabeni@redhat.com> |
| Date: Sun, 1 Dec 2019 18:41:25 +0100 |
| Subject: openvswitch: remove another BUG_ON() |
| |
| From: Paolo Abeni <pabeni@redhat.com> |
| |
| [ Upstream commit 8a574f86652a4540a2433946ba826ccb87f398cc ] |
| |
| If we can't build the flow del notification, we can simply delete |
| the flow, no need to crash the kernel. Still keep a WARN_ON to |
| preserve debuggability. |
| |
| Note: the BUG_ON() predates the Fixes tag, but this change |
| can be applied only after the mentioned commit. |
| |
| v1 -> v2: |
| - do not leak an skb on error |
| |
| Fixes: aed067783e50 ("openvswitch: Minimize ovs_flow_cmd_del critical section.") |
| Signed-off-by: Paolo Abeni <pabeni@redhat.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| net/openvswitch/datapath.c | 6 +++++- |
| 1 file changed, 5 insertions(+), 1 deletion(-) |
| |
| --- a/net/openvswitch/datapath.c |
| +++ b/net/openvswitch/datapath.c |
| @@ -1350,7 +1350,10 @@ static int ovs_flow_cmd_del(struct sk_bu |
| OVS_FLOW_CMD_DEL, |
| ufid_flags); |
| rcu_read_unlock(); |
| - BUG_ON(err < 0); |
| + if (WARN_ON_ONCE(err < 0)) { |
| + kfree_skb(reply); |
| + goto out_free; |
| + } |
| |
| ovs_notify(&dp_flow_genl_family, reply, info); |
| } else { |
| @@ -1358,6 +1361,7 @@ static int ovs_flow_cmd_del(struct sk_bu |
| } |
| } |
| |
| +out_free: |
| ovs_flow_free(flow, true); |
| return 0; |
| unlock: |