From: Paul Jakma Date: Tue, 4 Jul 2006 13:44:19 +0000 (+0000) Subject: [ospfd] Ensure NSM state functions can redirect next_state accidently X-Git-Tag: frr-2.0-rc1~2647 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=ba0beb4a846056301d6baa7f67002c6705084b40;p=mirror%2Ffrr.git [ospfd] Ensure NSM state functions can redirect next_state accidently 2006-07-02 Paul Jakma * ospf_nsm.c: (ospf_nsm_event) Don't allow action functions to change next_state if the NSM tables do not indicate next_state is conditional, log warning if one tries - existing code appears fine though. --- diff --git a/ospfd/ChangeLog b/ospfd/ChangeLog index 7486b0733e..e3805c82af 100644 --- a/ospfd/ChangeLog +++ b/ospfd/ChangeLog @@ -3,6 +3,10 @@ * ospf_nsm.c: (nsm_should_adj) New function, just consolidate the 10.4 adjacency check from nsm_twoway_received/nsm_adj_ok. (nsm_twoway_received/nsm_adj_ok) Use former. + (ospf_nsm_event) Don't allow action functions to change + next_state if the NSM tables do not indicate next_state is + conditional, log warning if one tries - existing code + appears fine though. 2006-06-30 Andrew J. Schorr diff --git a/ospfd/ospf_nsm.c b/ospfd/ospf_nsm.c index c5a5536751..73ed088f0a 100644 --- a/ospfd/ospf_nsm.c +++ b/ospfd/ospf_nsm.c @@ -878,6 +878,22 @@ ospf_nsm_event (struct thread *thread) if (! next_state) next_state = NSM [nbr->state][event].next_state; + else if (NSM [nbr->state][event].next_state != NSM_DependUpon) + { + /* There's a mismatch between the FSM tables and what an FSM + * action/state-change function returned. State changes which + * do not have conditional/DependUpon next-states should not + * try set next_state. + */ + zlog_warn ("NSM[%s:%s]: %s (%s): " + "Warning: action tried to change next_state to %s", + IF_NAME (oi), inet_ntoa (nbr->router_id), + LOOKUP (ospf_nsm_state_msg, nbr->state), + ospf_nsm_event_str [event], + LOOKUP (ospf_nsm_state_msg, next_state)); + + next_state = NSM [nbr->state][event].next_state; + } if (IS_DEBUG_OSPF (nsm, NSM_EVENTS)) zlog_debug ("NSM[%s:%s]: %s (%s)", IF_NAME (oi),