On Thu, Dec 06, 2018 at 08:04:54PM +0100, Remi Locherer wrote:
> On Thu, Dec 06, 2018 at 03:24:52PM +0100, Claudio Jeker wrote:
> > On Wed, Dec 05, 2018 at 11:53:48PM +0100, Remi Locherer wrote:
> > > On Wed, Dec 05, 2018 at 09:22:22AM +0100, Claudio Jeker wrote:
> > > > When parsing a network mask into prefixlen be more paranoid and make 
> > > > sure
> > > > no value bigger then 128 is returned. In general this should never 
> > > > happen
> > > > but if it does the result can be bad.
> > > > 
> > > > This is for bgpd but there are other users in the tree. I will adjust 
> > > > them
> > > > if we dicide to go this way.
> > > > -- 
> > > > :wq Claudio
> > > > 
> > > 
> > > makes sense to me.
> > > 
> > > OK remi@
> > > 
> > 
> > Here the same diff against other users of mask2prefixlen6().
> > IIRC there are some other users with different function names which I need
> > to hunt down (unless someone else wants to do that job).
> > 
> > Iked is a bit special since it returns 0 for non-contiguous netmasks.
> > Wonder if we should put a fatalx() there too - like in the other daemons.
> 
> I think it should be fatalx() also for iked.
> 
> Your diff looks good to me, OK remi@.
> 
> Below  the same diff for ospf6d. Feel free to commit it together with
> the rest.
> 

Na, you can do that one :). OK claudio@
 
> 
> cvs diff: Diffing .
> Index: util.c
> ===================================================================
> RCS file: /cvs/src/usr.sbin/ospf6d/util.c,v
> retrieving revision 1.2
> diff -u -p -r1.2 util.c
> --- util.c    22 Oct 2012 07:28:49 -0000      1.2
> +++ util.c    6 Dec 2018 18:49:51 -0000
> @@ -91,7 +91,8 @@ clearscope(struct in6_addr *in6)
>  u_int8_t
>  mask2prefixlen(struct sockaddr_in6 *sa_in6)
>  {
> -     u_int8_t        l = 0, *ap, *ep;
> +     u_int8_t        *ap, *ep;
> +     u_int            l = 0;
>  
>       /*
>        * sin6_len is the size of the sockaddr so substract the offset of
> @@ -107,32 +108,35 @@ mask2prefixlen(struct sockaddr_in6 *sa_i
>                       break;
>               case 0xfe:
>                       l += 7;
> -                     return (l);
> +                     goto done;
>               case 0xfc:
>                       l += 6;
> -                     return (l);
> +                     goto done;
>               case 0xf8:
>                       l += 5;
> -                     return (l);
> +                     goto done;
>               case 0xf0:
>                       l += 4;
> -                     return (l);
> +                     goto done;
>               case 0xe0:
>                       l += 3;
> -                     return (l);
> +                     goto done;
>               case 0xc0:
>                       l += 2;
> -                     return (l);
> +                     goto done;
>               case 0x80:
>                       l += 1;
> -                     return (l);
> +                     goto done;
>               case 0x00:
> -                     return (l);
> +                     goto done;
>               default:
>                       fatalx("non contiguous inet6 netmask");
>               }
>       }
>  
> +done:
> +     if (l > sizeof(struct in6_addr) * 8)
> +             fatalx("%s: prefixlen %d out of bound", __func__, l);
>       return (l);
>  }
>  
> 

-- 
:wq Claudio

Reply via email to