diff options
| author | Igor Ryzhov <iryzhov@nfware.com> | 2021-05-17 19:35:57 +0300 |
|---|---|---|
| committer | Igor Ryzhov <iryzhov@nfware.com> | 2021-05-17 19:35:57 +0300 |
| commit | 29ceb84855f486b43f320cacb7aa0511cde3c027 (patch) | |
| tree | 4f9d877310fca30871deb7d2eea603f36d8cf2b6 | |
| parent | 8f0c2688d79d9822157de9651fc2516c2a1379cb (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.c | 3 |
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) |
