]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: Ensure memory is not freed that dplane depends on in shutdown
authorDonald Sharp <sharpd@nvidia.com>
Sat, 17 Dec 2022 19:09:29 +0000 (14:09 -0500)
committerDonald Sharp <sharpd@nvidia.com>
Sat, 17 Dec 2022 19:09:29 +0000 (14:09 -0500)
Zebra has a shutdown setup where it asks the dplane to shutdown but can
still be processing data.  This is especially true if something the dplane
is listening on receives data that will be processed by the main dplane thread
from netlink.   When zebra_finalize is called it is possible that a bit
of data comes in before the zebra_dplane_shutdown() function is called
and the memory freed in ns_walk_func() causes the main dplane event
to crash when it cannot find the ns data anymore.

Reverse the order, stop the zebra dplane pthread and then free the
memory associated with the namespaces.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
zebra/main.c

index 3de97943fd1629581098c6cbef32f9b830a94fe7..e38f9a85e3b1eb45a2668ffc78fe69fcbfb97206 100644 (file)
@@ -221,12 +221,12 @@ void zebra_finalize(struct thread *dummy)
 {
        zlog_info("Zebra final shutdown");
 
-       /* Final shutdown of ns resources */
-       ns_walk_func(zebra_ns_final_shutdown, NULL, NULL);
-
        /* Stop dplane thread and finish any cleanup */
        zebra_dplane_shutdown();
 
+       /* Final shutdown of ns resources */
+       ns_walk_func(zebra_ns_final_shutdown, NULL, NULL);
+
        zebra_router_terminate();
 
        ns_terminate();