On Fri, Sep 18, 2015 at 02:58:40PM +0200, Vincent Gross wrote:
> On 09/13/15 11:49, Vincent Gross wrote:
> > On 09/13/15 10:37, Claudio Jeker wrote:
> >> On Sun, Sep 13, 2015 at 12:18:10AM +0200, Vincent Gross wrote:
> >>> On 09/12/15 22:10, Claudio Jeker wrote:
> >>>> On Sat, Sep 12, 2015 at 02:40:59PM +0200, Vincent Gross wrote:
> >>>>> inpt_lastport is never read without being written before, and only
> >>>>> in_pcbbind()
> >>>>> and in6_pcbsetport() are using it. This diff removes inpt_lastport from
> >>>>> struct inpcbtable and turns it into a local variable where it is used.
> >>>>>
> >>>>> Ok ?
> >>>> Reads OK but can not be applied because something wrapped some lines.
> >>>
> >>
> >> Lines are now fixed but now all the tabs got replaced by spaces. So the
> >> thing still fails to apply.
> >>
> > 
> > How about now ?
> > 
> > 
> > Index: sys/netinet/in_pcb.c
> > ===================================================================
> > RCS file: /cvs/src/sys/netinet/in_pcb.c,v
> > retrieving revision 1.179
> > diff -u -p -r1.179 in_pcb.c
> > --- sys/netinet/in_pcb.c    11 Sep 2015 15:29:47 -0000      1.179
> > +++ sys/netinet/in_pcb.c    12 Sep 2015 12:22:03 -0000
> > @@ -199,7 +199,6 @@ in_pcbinit(struct inpcbtable *table, int
> >         &table->inpt_lhash);
> >     if (table->inpt_lhashtbl == NULL)
> >             panic("in_pcbinit: hashinit failed for lport");
> > -   table->inpt_lastport = 0;
> >     table->inpt_count = 0;
> >     arc4random_buf(&table->inpt_key, sizeof(table->inpt_key));
> >  }
> > @@ -281,9 +280,8 @@ in_pcbbind(struct inpcb *inp, struct mbu
> >  {
> >     struct socket *so = inp->inp_socket;
> >     struct inpcbtable *table = inp->inp_table;
> > -   u_int16_t *lastport = &inp->inp_table->inpt_lastport;
> >     struct sockaddr_in *sin;
> > -   u_int16_t lport = 0;
> > +   u_int16_t lastport, lport = 0;
> >     int wild = 0, reuseport = (so->so_options & SO_REUSEPORT);
> >     int error;
> >  
> > @@ -391,16 +389,16 @@ in_pcbbind(struct inpcb *inp, struct mbu
> >                      */
> >                     count = first - last;
> >                     if (count)
> > -                           *lastport = first - arc4random_uniform(count);
> > +                           lastport = first - arc4random_uniform(count);
> >  
> >                     do {
> >                             if (count-- < 0)        /* completely used? */
> >                                     return (EADDRNOTAVAIL);
> > -                           --*lastport;
> > -                           if (*lastport > first || *lastport < last)
> > -                                   *lastport = first;
> > -                           lport = htons(*lastport);
> > -                   } while (in_baddynamic(*lastport, 
> > so->so_proto->pr_protocol) ||
> > +                           --lastport;
> > +                           if (lastport > first || lastport < last)
> > +                                   lastport = first;
> > +                           lport = htons(lastport);
> > +                   } while (in_baddynamic(lastport, 
> > so->so_proto->pr_protocol) ||
> >                         in_pcblookup(table, &zeroin_addr, 0,
> >                         &inp->inp_laddr, lport, wild, inp->inp_rtableid));
> >             } else {
> > @@ -409,16 +407,16 @@ in_pcbbind(struct inpcb *inp, struct mbu
> >                      */
> >                     count = last - first;
> >                     if (count)
> > -                           *lastport = first + arc4random_uniform(count);
> > +                           lastport = first + arc4random_uniform(count);
> >  
> >                     do {
> >                             if (count-- < 0)        /* completely used? */
> >                                     return (EADDRNOTAVAIL);
> > -                           ++*lastport;
> > -                           if (*lastport < first || *lastport > last)
> > -                                   *lastport = first;
> > -                           lport = htons(*lastport);
> > -                   } while (in_baddynamic(*lastport, 
> > so->so_proto->pr_protocol) ||
> > +                           ++lastport;
> > +                           if (lastport < first || lastport > last)
> > +                                   lastport = first;
> > +                           lport = htons(lastport);
> > +                   } while (in_baddynamic(lastport, 
> > so->so_proto->pr_protocol) ||
> >                         in_pcblookup(table, &zeroin_addr, 0,
> >                         &inp->inp_laddr, lport, wild, inp->inp_rtableid));
> >             }
> > Index: sys/netinet/in_pcb.h
> > ===================================================================
> > RCS file: /cvs/src/sys/netinet/in_pcb.h,v
> > retrieving revision 1.89
> > diff -u -p -r1.89 in_pcb.h
> > --- sys/netinet/in_pcb.h    16 Apr 2015 19:24:13 -0000      1.89
> > +++ sys/netinet/in_pcb.h    12 Sep 2015 12:22:03 -0000
> > @@ -152,7 +152,6 @@ struct inpcbtable {
> >     struct inpcbhead *inpt_hashtbl, *inpt_lhashtbl;
> >     SIPHASH_KEY inpt_key;
> >     u_long    inpt_hash, inpt_lhash;
> > -   u_int16_t inpt_lastport;
> >     int       inpt_count;
> >  };
> >  
> > Index: sys/netinet6/in6_pcb.c
> > ===================================================================
> > RCS file: /cvs/src/sys/netinet6/in6_pcb.c,v
> > retrieving revision 1.74
> > diff -u -p -r1.74 in6_pcb.c
> > --- sys/netinet6/in6_pcb.c  11 Sep 2015 15:29:47 -0000      1.74
> > +++ sys/netinet6/in6_pcb.c  12 Sep 2015 12:22:07 -0000
> > @@ -294,8 +294,7 @@ in6_pcbsetport(struct in6_addr *laddr, s
> >     struct socket *so = inp->inp_socket;
> >     struct inpcbtable *table = inp->inp_table;
> >     u_int16_t first, last;
> > -   u_int16_t *lastport = &inp->inp_table->inpt_lastport;
> > -   u_int16_t lport = 0;
> > +   u_int16_t lastport, lport = 0;
> >     int count;
> >     int wild = INPLOOKUP_IPV6;
> >     int error;
> > @@ -334,16 +333,16 @@ in6_pcbsetport(struct in6_addr *laddr, s
> >              */
> >             count = first - last;
> >             if (count)
> > -                   *lastport = first - arc4random_uniform(count);
> > +                   lastport = first - arc4random_uniform(count);
> >  
> >             do {
> >                     if (count-- < 0)        /* completely used? */
> >                             return (EADDRNOTAVAIL);
> > -                   --*lastport;
> > -                   if (*lastport > first || *lastport < last)
> > -                           *lastport = first;
> > -                   lport = htons(*lastport);
> > -           } while (in_baddynamic(*lastport, so->so_proto->pr_protocol) ||
> > +                   --lastport;
> > +                   if (lastport > first || lastport < last)
> > +                           lastport = first;
> > +                   lport = htons(lastport);
> > +           } while (in_baddynamic(lastport, so->so_proto->pr_protocol) ||
> >                 in_pcblookup(table, &zeroin6_addr, 0,
> >                 &inp->inp_laddr6, lport, wild, inp->inp_rtableid));
> >     } else {
> > @@ -352,16 +351,16 @@ in6_pcbsetport(struct in6_addr *laddr, s
> >              */
> >             count = last - first;
> >             if (count)
> > -                   *lastport = first + arc4random_uniform(count);
> > +                   lastport = first + arc4random_uniform(count);
> >  
> >             do {
> >                     if (count-- < 0)        /* completely used? */
> >                             return (EADDRNOTAVAIL);
> > -                   ++*lastport;
> > -                   if (*lastport < first || *lastport > last)
> > -                           *lastport = first;
> > -                   lport = htons(*lastport);
> > -           } while (in_baddynamic(*lastport, so->so_proto->pr_protocol) ||
> > +                   ++lastport;
> > +                   if (lastport < first || lastport > last)
> > +                           lastport = first;
> > +                   lport = htons(lastport);
> > +           } while (in_baddynamic(lastport, so->so_proto->pr_protocol) ||
> >                 in_pcblookup(table, &zeroin6_addr, 0,
> >                 &inp->inp_laddr6, lport, wild, inp->inp_rtableid));
> >     }
> > 
> 
> Ping anyone ?
> 

OK claudio@

-- 
:wq Claudio

Reply via email to