summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Ryzhov <iryzhov@nfware.com>2021-05-17 19:35:57 +0300
committerIgor Ryzhov <iryzhov@nfware.com>2021-05-17 19:35:57 +0300
commit29ceb84855f486b43f320cacb7aa0511cde3c027 (patch)
tree4f9d877310fca30871deb7d2eea603f36d8cf2b6
parent8f0c2688d79d9822157de9651fc2516c2a1379cb (diff)
ripngd: fix interface wakeup after shutdown
RIPNG schedules a call to `ripng_interface_wakeup` in 1 second after receiving the interface UP event from zebra. The function is called even if the interface was shut down during this interval. This is incorrect and also leads to a crash in the following scenario: ``` vtysh -c "conf" -c "router ripng vrf red" -c "network enp2s0" ip link add red type vrf table 1 ip link set enp2s0 vrf red ip link set enp2s0 down ip link set enp2s0 up && sleep 2 && ip link del red ``` Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
-rw-r--r--ripngd/ripng_interface.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/ripngd/ripng_interface.c b/ripngd/ripng_interface.c
index c4d494804f..6828398617 100644
--- a/ripngd/ripng_interface.c
+++ b/ripngd/ripng_interface.c
@@ -169,6 +169,9 @@ static int ripng_if_down(struct interface *ifp)
struct listnode *listnode = NULL, *nextnode = NULL;
ri = ifp->info;
+
+ THREAD_OFF(ri->t_wakeup);
+
ripng = ri->ripng;
if (ripng)