datapath: Avoid freeing wild pointer in corner case.
authorBen Pfaff <blp@nicira.com>
Thu, 28 Apr 2011 23:34:56 +0000 (16:34 -0700)
committerBen Pfaff <blp@nicira.com>
Fri, 29 Apr 2011 21:32:01 +0000 (14:32 -0700)
In odp_flow_cmd_new_or_set(), if flow_actions_alloc() fails in the "new
flow" case, then flow_put() will kfree() the new flow's 'sf_acts' pointer,
but nothing has initialized that pointer.  Initialize the pointer to NULL
to avoid the problem.

Found by inspection.

Signed-off-by: Ben Pfaff <blp@nicira.com>
Acked-by: Jesse Gross <jesse@nicira.com>
datapath/flow.c

index f264866..d670925 100644 (file)
@@ -196,6 +196,7 @@ struct sw_flow *flow_alloc(void)
 
        spin_lock_init(&flow->lock);
        atomic_set(&flow->refcnt, 1);
+       flow->sf_acts = NULL;
        flow->dead = false;
 
        return flow;