From: Jesse Gross Date: Fri, 24 Dec 2010 05:50:49 +0000 (-0800) Subject: datapath: Use local variable for freeing on flow put error. X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3d82583c40055f6cc257fc4663c2ac14498c7464;p=openvswitch datapath: Use local variable for freeing on flow put error. If inserting a flow failed and we need to free the actions, we currently directly free them from the flow struct. This is fine but it makes sparse complain about directly accessing an RCU protected field. We could insert some casts to avoid this but it's cleaner to just free the data from the local variable instead. Found with sparse. Signed-off-by: Jesse Gross Acked-by: Ben Pfaff --- diff --git a/datapath/datapath.c b/datapath/datapath.c index 3d5629d3..8e76af2e 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -823,6 +823,7 @@ static int do_put_flow(struct datapath *dp, struct odp_flow_put *uf, struct tbl_node *flow_node; struct sw_flow *flow; struct tbl *table; + struct sw_flow_actions *acts = NULL; int error; u32 hash; @@ -831,8 +832,6 @@ static int do_put_flow(struct datapath *dp, struct odp_flow_put *uf, flow_node = tbl_lookup(table, &uf->flow.key, hash, flow_cmp); if (!flow_node) { /* No such flow. */ - struct sw_flow_actions *acts; - error = -ENOENT; if (!(uf->flags & ODPPF_CREATE)) goto error; @@ -906,7 +905,7 @@ static int do_put_flow(struct datapath *dp, struct odp_flow_put *uf, return 0; error_free_flow_acts: - kfree(flow->sf_acts); + kfree(acts); error_free_flow: flow->sf_acts = NULL; flow_put(flow);