From: Donald Sharp Date: Tue, 14 Nov 2017 00:06:26 +0000 (-0500) Subject: bgpd, zebra: Flags should be 0 for unregister X-Git-Tag: frr-4.0-dev~153^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=f49e0f01ba10f04b5e6aa3e62583a918ae9963a6;p=mirror%2Ffrr.git bgpd, zebra: Flags should be 0 for unregister The flags value is not used for unregister events. Let's purposefully not send anything and purposefully not accept non 0 for it. Signed-off-by: Donald Sharp --- diff --git a/bgpd/bgp_nht.c b/bgpd/bgp_nht.c index fc44e5e9b2..625d4f8442 100644 --- a/bgpd/bgp_nht.c +++ b/bgpd/bgp_nht.c @@ -588,8 +588,10 @@ static void sendmsg_zebra_rnh(struct bgp_nexthop_cache *bnc, int command) s = zclient->obuf; stream_reset(s); zclient_create_header(s, command, bnc->bgp->vrf_id); - if (CHECK_FLAG(bnc->flags, BGP_NEXTHOP_CONNECTED) - || CHECK_FLAG(bnc->flags, BGP_STATIC_ROUTE_EXACT_MATCH)) + if ((command == ZEBRA_NEXTHOP_REGISTER || + command == ZEBRA_IMPORT_ROUTE_REGISTER) && + (CHECK_FLAG(bnc->flags, BGP_NEXTHOP_CONNECTED) + || CHECK_FLAG(bnc->flags, BGP_STATIC_ROUTE_EXACT_MATCH))) stream_putc(s, 1); else stream_putc(s, 0); diff --git a/zebra/zserv.c b/zebra/zserv.c index fdd20d65a1..9d9a7cd783 100644 --- a/zebra/zserv.c +++ b/zebra/zserv.c @@ -782,9 +782,12 @@ static int zserv_rnh_unregister(struct zserv *client, u_short length, s = client->ibuf; while (l < length) { - u_char noval; + uint8_t flags; + + STREAM_GETC(s, flags); + if (flags != 0) + goto stream_failure; - STREAM_GETC(s, noval); STREAM_GETW(s, p.family); STREAM_GETC(s, p.prefixlen); l += 4;