Claudio Jeker([email protected]) on 2018.05.30 15:18:45 +0200:
> Hi,
> 
> This adds a protection to handle aspaths overly large attributes in bgpd. 
> The main idea is to protect other bgp routes downstream for hitting the
> limit with is often not well catched.
> The limit is currently a bit arbitarily set to 4096 - 1024 which is afaik
> the same limit that bird uses.

the rfc says

   If, due to the limits on the maximum size of an UPDATE message (see
   Section 4), a single route doesn't fit into the message, the BGP speaker
   MUST not advertise the route to its peers and MAY choose to log an error
   locally.

so this is correct.

> While the default free zone should be fine with this it may be to strict
> from some strange internal use, where a large amount of e.g. communities
> are attached for extra information. I don't want to make this a knob
> fest and making this configurable. So happy for input from BGP users.

i for one dont see a problem with it.

code reads and runs ok too.

> Cheers 
> -- 
> :wq Claudio
> 
> Index: rde.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
> retrieving revision 1.379
> diff -u -p -r1.379 rde.c
> --- rde.c     10 Feb 2018 05:54:31 -0000      1.379
> +++ rde.c     24 Feb 2018 13:16:09 -0000
> @@ -997,6 +997,13 @@ rde_update_dispatch(struct imsg *imsg)
>       if (attrpath_len != 0) { /* 0 = no NLRI information in this message */
>               /* parse path attributes */
>               asp = path_get();
> +             /* protect from oversized messages */
> +             if (attrpath_len > 4096 - 1024) {
> +                     asp->flags |= F_ATTR_PARSE_ERR;
> +                     log_peer_warnx(&peer->conf, "update too big (%i), "
> +                         "path invalidated and prefix withdrawn",
> +                         attrpath_len);
> +             }
>               while (len > 0) {
>                       if ((pos = rde_attr_parse(p, len, peer, asp,
>                           &mpa)) < 0)
> 

Reply via email to