Remove a global variable in ip_input
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
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
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
On 4 June 2014 12:30, Martin Pieuchot mpieuc...@nolizard.org wrote: ok? sure