]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: fix asserting read of localpref
authorQuentin Young <qlyoung@nvidia.com>
Thu, 3 Sep 2020 18:10:33 +0000 (14:10 -0400)
committerQuentin Young <qlyoung@nvidia.com>
Thu, 3 Sep 2020 18:10:33 +0000 (14:10 -0400)
Attribute may not be long enough to contain a localpref value, resulting
in an assert on stream size. Gracefully handle this case instead.

Signed-off-by: Quentin Young <qlyoung@nvidia.com>
bgpd/bgp_attr.c

index cac3ab1ca72747fe6053db2417c7b83ae52b0a3d..c5c7d38ed5cef33fe1ae2d8edecb28dd19cb2234 100644 (file)
@@ -1631,16 +1631,20 @@ bgp_attr_local_pref(struct bgp_attr_parser_args *args)
           external peer, then this attribute MUST be ignored by the
           receiving speaker. */
        if (peer->sort == BGP_PEER_EBGP) {
-               stream_forward_getp(peer->curr, length);
+               STREAM_FORWARD_GETP(peer->curr, length);
                return BGP_ATTR_PARSE_PROCEED;
        }
 
-       attr->local_pref = stream_getl(peer->curr);
+       STREAM_GETL(peer->curr, attr->local_pref);
 
        /* Set the local-pref flag. */
        attr->flag |= ATTR_FLAG_BIT(BGP_ATTR_LOCAL_PREF);
 
        return BGP_ATTR_PARSE_PROCEED;
+
+stream_failure:
+       return bgp_attr_malformed(args, BGP_NOTIFY_UPDATE_ATTR_LENG_ERR,
+                                 args->total);
 }
 
 /* Atomic aggregate. */