From f1bd68ab587edcbf6d6702c1843eba286db190ab Mon Sep 17 00:00:00 2001 From: Jesse Gross Date: Wed, 11 Nov 2009 17:05:22 -0800 Subject: [PATCH] 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 --- vswitchd/bridge.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/vswitchd/bridge.c b/vswitchd/bridge.c index 276f4964..fb6a1413 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) { -- 2.30.2