From: Renato Westphal Date: Fri, 19 Oct 2018 18:55:22 +0000 (-0300) Subject: bgpd: use the vrf_bitmap_*() helper functions when necessary X-Git-Tag: frr-6.0.1~6^2~2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=57f416e2a92e1dd8f8d254a59d355437cac679fc;p=mirror%2Ffrr.git bgpd: use the vrf_bitmap_*() helper functions when necessary 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 --- diff --git a/bgpd/rfapi/vnc_zebra.c b/bgpd/rfapi/vnc_zebra.c index a982f28829..9b8431b569 100644 --- a/bgpd/rfapi/vnc_zebra.c +++ b/bgpd/rfapi/vnc_zebra.c @@ -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) { @@ -839,12 +842,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) @@ -875,9 +878,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