summaryrefslogtreecommitdiff
path: root/ospfd/ospf_interface.c
diff options
context:
space:
mode:
authorTomi Salminen <tsalminen@forcepoint.com>2022-02-02 11:19:09 +0200
committerTomi Salminen <tlsalmin@gmail.com>2022-02-04 10:26:54 +0200
commitd4e66f14854d1cc5bdb8b8209613fd596f8c1775 (patch)
treece13e251cb0c56b7e698c87bfc1806f2fe8f30d6 /ospfd/ospf_interface.c
parentcf8638ed34cb7148697fa98819235dc036c77248 (diff)
ospfd: Core in ospf_if_down during shutdown.
Skip marking routes as changed in ospf_if_down if there's now new_table present, which might be the case when the instance is being finished The backtrace for the core was: raise (sig=sig@entry=11) at ../sysdeps/unix/sysv/linux/raise.c:50 core_handler (signo=11, siginfo=0x7fffffffe170, context=<optimized out>) at lib/sigevent.c:262 <signal handler called> route_top (table=0x0) at lib/table.c:401 ospf_if_down (oi=oi@entry=0x555555999090) at ospfd/ospf_interface.c:849 ospf_if_free (oi=0x555555999090) at ospfd/ospf_interface.c:339 ospf_finish_final (ospf=0x55555599c830) at ospfd/ospfd.c:749 ospf_deferred_shutdown_finish (ospf=0x55555599c830) at ospfd/ospfd.c:578 ospf_deferred_shutdown_check (ospf=<optimized out>) at ospfd/ospfd.c:627 ospf_finish (ospf=<optimized out>) at ospfd/ospfd.c:683 ospf_terminate () at ospfd/ospfd.c:653 sigint () at ospfd/ospf_main.c:109 quagga_sigevent_process () at lib/sigevent.c:130 thread_fetch (m=m@entry=0x5555556e45e0, fetch=fetch@entry=0x7fffffffe9b0) at lib/thread.c:1709 frr_run (master=0x5555556e45e0) at lib/libfrr.c:1174 main (argc=9, argv=0x7fffffffecb8) at ospfd/ospf_main.c:254 Signed-off-by: Tomi Salminen <tsalminen@forcepoint.com>
Diffstat (limited to 'ospfd/ospf_interface.c')
-rw-r--r--ospfd/ospf_interface.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c
index 299e753ccf..2626cccc37 100644
--- a/ospfd/ospf_interface.c
+++ b/ospfd/ospf_interface.c
@@ -845,6 +845,8 @@ int ospf_if_down(struct ospf_interface *oi)
/* Shutdown packet reception and sending */
ospf_if_stream_unset(oi);
+ if (!ospf->new_table)
+ return 1;
for (rn = route_top(ospf->new_table); rn; rn = route_next(rn)) {
or = rn->info;