Good catch. Looks Good.
On Mon, Mar 21, 2011 at 10:59 AM, Ben Pfaff <[email protected]> wrote: > This code was checking a name from cfg->interfaces[i] but using the result > to decide whether to delete port->ifaces[i]. The two arrays aren't > necessarily in the same order so this code could delete the wrong iface. > > Found by inspection. This is probably not a common problem in practice > because I imagine that deleting an interface from a bond, without deleting > the bond itself, is a rare operation. The problem would also be > intermittent--after a few switch reconfiguration cycles I imagine that > the problem would resolve. > --- > vswitchd/bridge.c | 5 +++-- > 1 files changed, 3 insertions(+), 2 deletions(-) > > diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c > index c082e5d..1bf4148 100644 > --- a/vswitchd/bridge.c > +++ b/vswitchd/bridge.c > @@ -3962,8 +3962,9 @@ port_del_ifaces(struct port *port, const struct > ovsrec_port *cfg) > > /* Get rid of deleted interfaces. */ > for (i = 0; i < port->n_ifaces; ) { > - if (!shash_find(&new_ifaces, cfg->interfaces[i]->name)) { > - iface_destroy(port->ifaces[i]); > + struct iface *iface = port->ifaces[i]; > + if (!shash_find(&new_ifaces, iface->name)) { > + iface_destroy(iface); > } else { > i++; > } > -- > 1.7.1 > > _______________________________________________ > dev mailing list > [email protected] > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
