From: Jesse Gross Date: Thu, 12 Nov 2009 01:05:22 +0000 (-0800) Subject: bridge: Fix segfault when updating learning table for deleted port. X-Git-Tag: v0.90.7~7 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=f1bd68ab587edcbf6d6702c1843eba286db190ab;p=sliver-openvswitch.git bridge: Fix segfault when updating learning table for deleted port. A function call using in_port was accidentally moved before the check to see if it is null. in_port can be null if a port was deleted but an update is still pending. This moves the call after the check. Bug #2313 --- diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 276f49640..fb6a1413f 100644 --- a/vswitchd/bridge.c +++ b/vswitchd/bridge.c @@ -2092,16 +2092,17 @@ bridge_account_flow_ofhook_cb(const flow_t *flow, { struct bridge *br = br_; struct port *in_port; - int vlan; const union odp_action *a; /* Feed information from the active flows back into the learning table * to ensure that table is always in sync with what is actually flowing * through the datapath. */ in_port = port_from_dp_ifidx(br, flow->in_port); - vlan = flow_get_vlan(br, flow, in_port, false); - if (in_port && vlan >= 0) { - update_learning_table(br, flow, vlan, in_port); + if (in_port) { + int vlan = flow_get_vlan(br, flow, in_port, false); + if (vlan >= 0) { + update_learning_table(br, flow, vlan, in_port); + } } if (!br->has_bonded_ports) {