On Thu, Sep 15, 2011 at 4:57 PM, Ben Pfaff <[email protected]> wrote: > On Thu, Sep 15, 2011 at 04:52:39PM -0700, Jesse Gross wrote: >> It's possible to start receiving packets on a datapath as soon as >> the internal device is created. It's therefore important that the >> datapath be fully initialized before this, which it currently isn't. >> In particularly, the fact that dp->stats_percpu is not yet set is >> potentially fatal. In addition, if allocation of the Netlink response >> failed it would leak the percpu memory. This fixes both problems. >> >> Found by code inspection, in practice the datapath is probably always >> done initializing before someone can send a packet on it. >> >> Signed-off-by: Jesse Gross <[email protected]> > > Don't we now dereference an uninitialized pointer? > > struct vport *vport; > ... > dp->dp_ifindex = vport_get_ifindex(vport); > ... > vport = new_vport(&parms);
Oops, you're right. Annoyingly we do need to set dp_ifindex before the internal port gets going because when it misses the (empy) flow table we need the ifindex for the upcall. I guess we have to do the assignment in internal_dev_create() with a memory barrier before netif_start_queue()... _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
