From d1a0ac221a9704ff6a6c25dacdd81d209e39cb0f Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 21 Jan 2013 03:59:16 -0800 Subject: [PATCH] datapath: Don't dump partial action lists in flows. After commit 9b405f1aa8d175dc63ad3ffe5d0fe05d5ee09162 (datapath: More flexible kernel/userspace tunneling attribute.), it was possible for a flow dump to return a partial action list. It's better to return no action list at all in this situation since then userspace will know that it should request the full thing if it wants rather than have incorrect results. Therefore, this prevents those partial lists in situations where we have a very large number of actions. Signed-off-by: Ben Pfaff Signed-off-by: Jesse Gross --- datapath/datapath.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/datapath/datapath.c b/datapath/datapath.c index 4aeae5d47..2b43774d3 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -1215,9 +1215,14 @@ static int ovs_flow_cmd_fill_info(struct sw_flow *flow, struct datapath *dp, start = nla_nest_start(skb, OVS_FLOW_ATTR_ACTIONS); if (start) { err = actions_to_attr(sf_acts->actions, sf_acts->actions_len, skb); - if (err < 0 && skb_orig_len) - goto error; - nla_nest_end(skb, start); + if (!err) + nla_nest_end(skb, start); + else { + if (skb_orig_len) + goto error; + + nla_nest_cancel(skb, start); + } } else if (skb_orig_len) { err = -ENOMEM; goto error; -- 2.20.1