From: Ethan Jackson Date: Tue, 6 Nov 2012 03:00:07 +0000 (-0800) Subject: bridge: Fix a segmentation fault in bridge_init_ofproto(). X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b099cd5f555a22646fe0be565ccef3c0cf9dcd87;p=openvswitch bridge: Fix a segmentation fault in bridge_init_ofproto(). When the database is initially created there may no be rows in the Open_vSwitch table. In this case, the ovsrec_open_vswitch passed to bridge_init_ofproto() is NULL and causes a segmentation fault. Signed-off-by: Ethan Jackson --- diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 9fcc9709..8f544a99 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -276,25 +276,27 @@ bridge_init_ofproto(const struct ovsrec_open_vswitch *cfg) shash_init(&iface_hints); - for (i = 0; i < cfg->n_bridges; i++) { - const struct ovsrec_bridge *br_cfg = cfg->bridges[i]; - int j; - - for (j = 0; j < br_cfg->n_ports; j++) { - struct ovsrec_port *port_cfg = br_cfg->ports[j]; - int k; - - for (k = 0; k < port_cfg->n_interfaces; k++) { - struct ovsrec_interface *if_cfg = port_cfg->interfaces[k]; - struct iface_hint *iface_hint; - - iface_hint = xmalloc(sizeof *iface_hint); - iface_hint->br_name = br_cfg->name; - iface_hint->br_type = br_cfg->datapath_type; - iface_hint->ofp_port = if_cfg->n_ofport_request ? - *if_cfg->ofport_request : OFPP_NONE; - - shash_add(&iface_hints, if_cfg->name, iface_hint); + if (cfg) { + for (i = 0; i < cfg->n_bridges; i++) { + const struct ovsrec_bridge *br_cfg = cfg->bridges[i]; + int j; + + for (j = 0; j < br_cfg->n_ports; j++) { + struct ovsrec_port *port_cfg = br_cfg->ports[j]; + int k; + + for (k = 0; k < port_cfg->n_interfaces; k++) { + struct ovsrec_interface *if_cfg = port_cfg->interfaces[k]; + struct iface_hint *iface_hint; + + iface_hint = xmalloc(sizeof *iface_hint); + iface_hint->br_name = br_cfg->name; + iface_hint->br_type = br_cfg->datapath_type; + iface_hint->ofp_port = if_cfg->n_ofport_request ? + *if_cfg->ofport_request : OFPP_NONE; + + shash_add(&iface_hints, if_cfg->name, iface_hint); + } } } }