]> git.puffer.fish Git - mirror/frr.git/commitdiff
bgpd: use the vrf_bitmap_*() helper functions when necessary
authorRenato Westphal <renato@opensourcerouting.org>
Fri, 19 Oct 2018 18:55:22 +0000 (15:55 -0300)
committerRenato Westphal <renato@opensourcerouting.org>
Sat, 20 Oct 2018 15:39:05 +0000 (12:39 -0300)
zclient->redist[afi][type] is a hash table and not an integer since a
while ago when VRF support was introduced. As such, zclient->redist[][]
should never be manipulated directly, the vrf_bitmap_*() helper functions
should be used instead. This fixes a few crashes found by the CLI fuzzer.

Signed-off-by: Renato Westphal <renato@opensourcerouting.org>
bgpd/rfapi/vnc_zebra.c

index 158c88da1670b4f901be8a721937491a0a296a2d..97d520eda76ce3d6d553296028815866ee9a75b6 100644 (file)
@@ -578,7 +578,9 @@ static void vnc_zebra_add_del_prefix(struct bgp *bgp,
                return;
        }
 
-       if (!zclient_vnc->redist[family2afi(rn->p.family)][ZEBRA_ROUTE_VNC])
+       if (!vrf_bitmap_check(zclient_vnc->redist[family2afi(rn->p.family)]
+                                                [ZEBRA_ROUTE_VNC],
+                             VRF_DEFAULT))
                return;
 
        if (!bgp->rfapi_cfg) {
@@ -642,7 +644,8 @@ static void vnc_zebra_add_del_nve(struct bgp *bgp, struct rfapi_descriptor *rfd,
        if (zclient_vnc->sock < 0)
                return;
 
-       if (!zclient_vnc->redist[afi][ZEBRA_ROUTE_VNC])
+       if (!vrf_bitmap_check(zclient_vnc->redist[afi][ZEBRA_ROUTE_VNC],
+                             VRF_DEFAULT))
                return;
 
        if (afi != AFI_IP && afi != AFI_IP6) {
@@ -841,12 +844,12 @@ int vnc_redistribute_set(struct bgp *bgp, afi_t afi, int type)
        //  bgp->redist[afi][type] = 1;
 
        /* Return if already redistribute flag is set. */
-       if (zclient_vnc->redist[afi][type])
+       if (vrf_bitmap_check(zclient_vnc->redist[afi][type], VRF_DEFAULT))
                return CMD_WARNING_CONFIG_FAILED;
 
        vrf_bitmap_set(zclient_vnc->redist[afi][type], VRF_DEFAULT);
 
-       // zclient_vnc->redist[afi][type] = 1;
+       // vrf_bitmap_set(zclient_vnc->redist[afi][type], VRF_DEFAULT);
 
        /* Return if zebra connection is not established. */
        if (zclient_vnc->sock < 0)
@@ -877,9 +880,9 @@ int vnc_redistribute_unset(struct bgp *bgp, afi_t afi, int type)
        bgp->rfapi_cfg->redist[afi][type] = 0;
 
        /* Return if zebra connection is disabled. */
-       if (!zclient_vnc->redist[afi][type])
+       if (!vrf_bitmap_check(zclient_vnc->redist[afi][type], VRF_DEFAULT))
                return CMD_WARNING_CONFIG_FAILED;
-       zclient_vnc->redist[afi][type] = 0;
+       vrf_bitmap_unset(zclient_vnc->redist[afi][type], VRF_DEFAULT);
 
        if (bgp->rfapi_cfg->redist[AFI_IP][type] == 0
            && bgp->rfapi_cfg->redist[AFI_IP6][type] == 0