lib: fix crash when terminating inactive VRFs

If the VRF is not enabled, if_terminate deletes the VRF after the last
interface is removed from it. Therefore daemons crash on the subsequent
call to vrf_delete. We should call vrf_delete only for enabled VRFs.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
This commit is contained in:
Igor Ryzhov 2021-11-03 00:29:19 +03:00
parent 9acc98c865
commit d2dbaf3b5e

View File

@ -539,10 +539,13 @@ void vrf_init(int (*create)(struct vrf *), int (*enable)(struct vrf *),
static void vrf_terminate_single(struct vrf *vrf) static void vrf_terminate_single(struct vrf *vrf)
{ {
int enabled = vrf_is_enabled(vrf);
/* Clear configured flag and invoke delete. */ /* Clear configured flag and invoke delete. */
UNSET_FLAG(vrf->status, VRF_CONFIGURED); UNSET_FLAG(vrf->status, VRF_CONFIGURED);
if_terminate(vrf); if_terminate(vrf);
vrf_delete(vrf); if (enabled)
vrf_delete(vrf);
} }
/* Terminate VRF module. */ /* Terminate VRF module. */