diff options
| author | Donald Sharp <donaldsharp72@gmail.com> | 2021-11-04 20:29:23 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-11-04 20:29:23 -0400 |
| commit | 95d2bed34b8037d33cbf23fd1bf215f98c4fb9d4 (patch) | |
| tree | 2d36ec05462362f135a9143c206fe10527df7825 | |
| parent | c60f71713ccfd4c98304d7f3ecf7b963fab251f9 (diff) | |
| parent | d2dbaf3b5e57051b56efd1a38d69f552a5d56c41 (diff) | |
Merge pull request #9943 from idryzhov/crash-fixes
a couple of crash fixes after recent interface/vrf rework
| -rw-r--r-- | lib/vrf.c | 9 | ||||
| -rw-r--r-- | zebra/zebra_netns_notify.c | 1 |
2 files changed, 6 insertions, 4 deletions
@@ -256,10 +256,8 @@ void vrf_delete(struct vrf *vrf) * the ID mapping. Interfaces assigned to this VRF should've been * removed already as part of the VRF going down. */ - if (vrf_is_user_cfged(vrf)) { - vrf->ns_ctxt = NULL; + if (vrf_is_user_cfged(vrf)) return; - } /* Do not delete the VRF if it has interfaces configured in it. */ if (!RB_EMPTY(if_name_head, &vrf->ifaces_by_name)) @@ -541,10 +539,13 @@ void vrf_init(int (*create)(struct vrf *), int (*enable)(struct vrf *), static void vrf_terminate_single(struct vrf *vrf) { + int enabled = vrf_is_enabled(vrf); + /* Clear configured flag and invoke delete. */ UNSET_FLAG(vrf->status, VRF_CONFIGURED); if_terminate(vrf); - vrf_delete(vrf); + if (enabled) + vrf_delete(vrf); } /* Terminate VRF module. */ diff --git a/zebra/zebra_netns_notify.c b/zebra/zebra_netns_notify.c index 0d260ad639..5b9539904f 100644 --- a/zebra/zebra_netns_notify.c +++ b/zebra/zebra_netns_notify.c @@ -165,6 +165,7 @@ static int zebra_ns_delete(char *name) /* the deletion order is the same * as the one used when siging signal is received */ + vrf->ns_ctxt = NULL; vrf_delete(vrf); if (ns) ns_delete(ns); |
