From d2dbaf3b5e57051b56efd1a38d69f552a5d56c41 Mon Sep 17 00:00:00 2001 From: Igor Ryzhov Date: Wed, 3 Nov 2021 00:29:19 +0300 Subject: 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 --- lib/vrf.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'lib/vrf.c') diff --git a/lib/vrf.c b/lib/vrf.c index a9a5a83794..aaedb63800 100644 --- a/lib/vrf.c +++ b/lib/vrf.c @@ -539,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. */ -- cgit v1.2.3