]> git.puffer.fish Git - mirror/frr.git/commitdiff
zebra: Perform safe walk of RIB entries in rib_process()
authorvivek <vivek@cumulusnetworks.com>
Fri, 11 Nov 2016 02:49:43 +0000 (18:49 -0800)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Tue, 17 Jan 2017 23:43:35 +0000 (18:43 -0500)
There is a scenario where a RIB entry is unlinked and freed during RIB
processing. However, the walk of the entries is not being performed in
a safe manner. Fix the code to do this correctly.

Signed-off-by: Vivek Venkatraman <vivek@cumulusnetworks.com>
Ticket: CM-13393
Reviewed By: Trivial
Testing Done: Basic manual test

zebra/zebra_rib.c

index e48da0479b399b6b5ce61974833fa3b61f41d675..59893b1a0fa2e1fdf025520a0bd5ee90cac142bf 100644 (file)
@@ -1633,7 +1633,7 @@ rib_process (struct route_node *rn)
   if (IS_ZEBRA_DEBUG_RIB_DETAILED)
     zlog_debug ("%u:%s/%d: Processing rn %p", vrf_id, buf, rn->p.prefixlen, rn);
 
-  RNODE_FOREACH_RIB (rn, rib)
+  RNODE_FOREACH_RIB_SAFE (rn, rib, next)
     {
       if (IS_ZEBRA_DEBUG_RIB_DETAILED)
         zlog_debug ("%u:%s/%d: Examine rib %p (type %d) status %x flags %x "