]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: fix disabling table manager
authorIgor Ryzhov <iryzhov@nfware.com>
Thu, 4 Nov 2021 22:54:48 +0000 (01:54 +0300)
committerIgor Ryzhov <iryzhov@nfware.com>
Thu, 11 Nov 2021 11:59:51 +0000 (14:59 +0300)
42d4b30e introduced per-VRF table manager.

Table manager is allocated when the VRF is created, but it is freed when
the VRF is disabled. When this VRF is re-enabled, zebra ends up with
table manager being NULL pointer and it crashes on any dereference.

Table manager should be freed when the VRF is deleted, not when it's
disabled.

Signed-off-by: Igor Ryzhov <iryzhov@nfware.com>
zebra/zebra_vrf.c

index 66d6d4b4f27bff6f17f2c7a0b327ad872dde3e0d..1cc7e8932b7a29903d70ba2a0d874e4a7320eac7 100644 (file)
@@ -184,8 +184,6 @@ static int zebra_vrf_disable(struct vrf *vrf)
                zlog_debug("VRF %s id %u is now inactive", zvrf_name(zvrf),
                           zvrf_id(zvrf));
 
-       table_manager_disable(zvrf);
-
        /* Stop any VxLAN-EVPN processing. */
        zebra_vxlan_vrf_disable(zvrf);
 
@@ -274,6 +272,8 @@ static int zebra_vrf_delete(struct vrf *vrf)
                zlog_debug("VRF %s id %u deleted", zvrf_name(zvrf),
                           zvrf_id(zvrf));
 
+       table_manager_disable(zvrf);
+
        /* clean-up work queues */
        for (i = 0; i < MQ_SIZE; i++) {
                struct listnode *lnode, *nnode;