netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net v2 0/2] openvswitch: remove a couple of BUG_ON()
@ 2019-12-01 17:41 Paolo Abeni
  2019-12-01 17:41 ` [PATCH net v2 1/2] openvswitch: drop unneeded BUG_ON() in ovs_flow_cmd_build_info() Paolo Abeni
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Paolo Abeni @ 2019-12-01 17:41 UTC (permalink / raw)
  To: netdev; +Cc: David S. Miller, Pravin B Shelar, Sergei Shtylyov

The openvswitch kernel datapath includes some BUG_ON() statements to check
for exceptional/unexpected failures. These patches drop a couple of them,
where we can do that without introducing other side effects.

v1 -> v2:
 - avoid memory leaks on error path

Paolo Abeni (2):
  openvswitch: drop unneeded BUG_ON() in ovs_flow_cmd_build_info()
  openvswitch: remove another BUG_ON()

 net/openvswitch/datapath.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

-- 
2.21.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH net v2 1/2] openvswitch: drop unneeded BUG_ON() in ovs_flow_cmd_build_info()
  2019-12-01 17:41 [PATCH net v2 0/2] openvswitch: remove a couple of BUG_ON() Paolo Abeni
@ 2019-12-01 17:41 ` Paolo Abeni
  2019-12-01 17:41 ` [PATCH net v2 2/2] openvswitch: remove another BUG_ON() Paolo Abeni
  2019-12-01 21:21 ` [PATCH net v2 0/2] openvswitch: remove a couple of BUG_ON() David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: Paolo Abeni @ 2019-12-01 17:41 UTC (permalink / raw)
  To: netdev; +Cc: David S. Miller, Pravin B Shelar, Sergei Shtylyov

All the callers of ovs_flow_cmd_build_info() already deal with
error return code correctly, so we can handle the error condition
in a more gracefull way. Still dump a warning to preserve
debuggability.

v1 -> v2:
 - clarify the commit message
 - clean the skb and report the error (DaveM)

Fixes: ccb1352e76cf ("net: Add Open vSwitch kernel components.")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
---
 net/openvswitch/datapath.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index 293d5289c4a1..8cab3435d8da 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -905,7 +905,10 @@ static struct sk_buff *ovs_flow_cmd_build_info(const struct sw_flow *flow,
 	retval = ovs_flow_cmd_fill_info(flow, dp_ifindex, skb,
 					info->snd_portid, info->snd_seq, 0,
 					cmd, ufid_flags);
-	BUG_ON(retval < 0);
+	if (WARN_ON_ONCE(retval < 0)) {
+		kfree_skb(skb);
+		skb = ERR_PTR(retval);
+	}
 	return skb;
 }
 
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH net v2 2/2] openvswitch: remove another BUG_ON()
  2019-12-01 17:41 [PATCH net v2 0/2] openvswitch: remove a couple of BUG_ON() Paolo Abeni
  2019-12-01 17:41 ` [PATCH net v2 1/2] openvswitch: drop unneeded BUG_ON() in ovs_flow_cmd_build_info() Paolo Abeni
@ 2019-12-01 17:41 ` Paolo Abeni
  2019-12-01 21:21 ` [PATCH net v2 0/2] openvswitch: remove a couple of BUG_ON() David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: Paolo Abeni @ 2019-12-01 17:41 UTC (permalink / raw)
  To: netdev; +Cc: David S. Miller, Pravin B Shelar, Sergei Shtylyov

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>
---
 net/openvswitch/datapath.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/net/openvswitch/datapath.c b/net/openvswitch/datapath.c
index 8cab3435d8da..1047e8043084 100644
--- a/net/openvswitch/datapath.c
+++ b/net/openvswitch/datapath.c
@@ -1372,7 +1372,10 @@ static int ovs_flow_cmd_del(struct sk_buff *skb, struct genl_info *info)
 						     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 {
@@ -1380,6 +1383,7 @@ static int ovs_flow_cmd_del(struct sk_buff *skb, struct genl_info *info)
 		}
 	}
 
+out_free:
 	ovs_flow_free(flow, true);
 	return 0;
 unlock:
-- 
2.21.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net v2 0/2] openvswitch: remove a couple of BUG_ON()
  2019-12-01 17:41 [PATCH net v2 0/2] openvswitch: remove a couple of BUG_ON() Paolo Abeni
  2019-12-01 17:41 ` [PATCH net v2 1/2] openvswitch: drop unneeded BUG_ON() in ovs_flow_cmd_build_info() Paolo Abeni
  2019-12-01 17:41 ` [PATCH net v2 2/2] openvswitch: remove another BUG_ON() Paolo Abeni
@ 2019-12-01 21:21 ` David Miller
  2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2019-12-01 21:21 UTC (permalink / raw)
  To: pabeni; +Cc: netdev, pshelar, sergei.shtylyov

From: Paolo Abeni <pabeni@redhat.com>
Date: Sun,  1 Dec 2019 18:41:23 +0100

> The openvswitch kernel datapath includes some BUG_ON() statements to check
> for exceptional/unexpected failures. These patches drop a couple of them,
> where we can do that without introducing other side effects.
> 
> v1 -> v2:
>  - avoid memory leaks on error path

Series applied and queued up for -stable, thanks.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-12-01 21:21 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-01 17:41 [PATCH net v2 0/2] openvswitch: remove a couple of BUG_ON() Paolo Abeni
2019-12-01 17:41 ` [PATCH net v2 1/2] openvswitch: drop unneeded BUG_ON() in ovs_flow_cmd_build_info() Paolo Abeni
2019-12-01 17:41 ` [PATCH net v2 2/2] openvswitch: remove another BUG_ON() Paolo Abeni
2019-12-01 21:21 ` [PATCH net v2 0/2] openvswitch: remove a couple of BUG_ON() David Miller

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).