Remove a global variable in ip_input

2014-06-04 Thread Martin Pieuchot
ok?

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 -  1.233
+++ netinet/ip_input.c  4 Jun 2014 10:28:29 -
@@ -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;



Re: Remove a global variable in ip_input

2014-06-04 Thread Bret Lambert
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?

 
 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.c10 May 2014 12:30:27 -  1.233
 +++ netinet/ip_input.c4 Jun 2014 10:28:29 -
 @@ -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;
 



Re: Remove a global variable in ip_input

2014-06-04 Thread Martin Pieuchot
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 -  1.233
  +++ netinet/ip_input.c  4 Jun 2014 10:28:29 -
  @@ -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;
  
 



Re: Remove a global variable in ip_input

2014-06-04 Thread Mike Belopuhov
On 4 June 2014 12:30, Martin Pieuchot mpieuc...@nolizard.org wrote:
 ok?


sure