On 04/06/14(Wed) 12:45, Bret Lambert wrote:
> On Wed, Jun 04, 2014 at 12:30:58PM +0200, Martin Pieuchot wrote:
> > ok?
> 
> Seems reasonable enough; are there any alignment issues placing
> it on the stack?

Nop, it's just a structure used to do some address lookups, it's already
done like that in other places :)

> > Index: netinet/ip_input.c
> > ===================================================================
> > RCS file: /home/ncvs/src/sys/netinet/ip_input.c,v
> > retrieving revision 1.233
> > diff -u -p -r1.233 ip_input.c
> > --- netinet/ip_input.c      10 May 2014 12:30:27 -0000      1.233
> > +++ netinet/ip_input.c      4 Jun 2014 10:28:29 -0000
> > @@ -190,7 +190,6 @@ ip_init(void)
> >     strlcpy(ipsec_def_comp, IPSEC_DEFAULT_DEF_COMP, sizeof(ipsec_def_comp));
> >  }
> >  
> > -struct     sockaddr_in ipaddr = { sizeof(ipaddr), AF_INET };
> >  struct     route ipforward_rt;
> >  
> >  void
> > @@ -1003,6 +1002,7 @@ int
> >  ip_dooptions(struct mbuf *m, struct ifnet *ifp)
> >  {
> >     struct ip *ip = mtod(m, struct ip *);
> > +   struct sockaddr_in ipaddr;
> >     u_char *cp;
> >     struct ip_timestamp ipt;
> >     struct in_ifaddr *ia;
> > @@ -1057,6 +1057,9 @@ ip_dooptions(struct mbuf *m, struct ifne
> >                             code = &cp[IPOPT_OFFSET] - (u_char *)ip;
> >                             goto bad;
> >                     }
> > +                   memset(&ipaddr, 0, sizeof(ipaddr));
> > +                   ipaddr.sin_family = AF_INET;
> > +                   ipaddr.sin_len = sizeof(ipaddr);
> >                     ipaddr.sin_addr = ip->ip_dst;
> >                     ia = ifatoia(ifa_ifwithaddr(sintosa(&ipaddr),
> >                         m->m_pkthdr.ph_rtableid));
> > @@ -1084,6 +1087,9 @@ ip_dooptions(struct mbuf *m, struct ifne
> >                     /*
> >                      * locate outgoing interface
> >                      */
> > +                   memset(&ipaddr, 0, sizeof(ipaddr));
> > +                   ipaddr.sin_family = AF_INET;
> > +                   ipaddr.sin_len = sizeof(ipaddr);
> >                     memcpy(&ipaddr.sin_addr, cp + off,
> >                         sizeof(ipaddr.sin_addr));
> >                     if (opt == IPOPT_SSRR) {
> > @@ -1126,8 +1132,10 @@ ip_dooptions(struct mbuf *m, struct ifne
> >                     off--;                  /* 0 origin */
> >                     if ((off + sizeof(struct in_addr)) > optlen)
> >                             break;
> > -                   memcpy(&ipaddr.sin_addr, &ip->ip_dst,
> > -                       sizeof(ipaddr.sin_addr));
> > +                   memset(&ipaddr, 0, sizeof(ipaddr));
> > +                   ipaddr.sin_family = AF_INET;
> > +                   ipaddr.sin_len = sizeof(ipaddr);
> > +                   ipaddr.sin_addr = ip->ip_dst;
> >                     /*
> >                      * locate outgoing interface; if we're the destination,
> >                      * use the incoming interface (should be same).
> > @@ -1168,6 +1176,9 @@ ip_dooptions(struct mbuf *m, struct ifne
> >                             if (ipt.ipt_ptr - 1 + sizeof(n_time) +
> >                                 sizeof(struct in_addr) > ipt.ipt_len)
> >                                     goto bad;
> > +                           memset(&ipaddr, 0, sizeof(ipaddr));
> > +                           ipaddr.sin_family = AF_INET;
> > +                           ipaddr.sin_len = sizeof(ipaddr);
> >                             ipaddr.sin_addr = dst;
> >                             ia = ifatoia(ifaof_ifpforaddr(sintosa(&ipaddr),
> >                                 ifp));
> > @@ -1182,8 +1193,10 @@ ip_dooptions(struct mbuf *m, struct ifne
> >                             if (ipt.ipt_ptr - 1 + sizeof(n_time) +
> >                                 sizeof(struct in_addr) > ipt.ipt_len)
> >                                     goto bad;
> > -                           memcpy(&ipaddr.sin_addr, &sin,
> > -                               sizeof(struct in_addr));
> > +                           memset(&ipaddr, 0, sizeof(ipaddr));
> > +                           ipaddr.sin_family = AF_INET;
> > +                           ipaddr.sin_len = sizeof(ipaddr);
> > +                           ipaddr.sin_addr = sin;
> >                             if (ifa_ifwithaddr(sintosa(&ipaddr),
> >                                 m->m_pkthdr.ph_rtableid) == 0)
> >                                     continue;
> > 
> 

Reply via email to