[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

r5371 - in glibc-package/trunk/debian: . patches/kfreebsd



Author: aurel32
Date: 2012-11-13 15:54:37 +0000 (Tue, 13 Nov 2012)
New Revision: 5371

Modified:
   glibc-package/trunk/debian/changelog
   glibc-package/trunk/debian/patches/kfreebsd/local-getaddrinfo-freebsd-kernel.diff
Log:
  * patches/kfreebsd/local-getaddrinfo-freebsd-kernel.diff: update to 
    fix uninitialised bytes access in getaddrinfo().  Closes: #692433.



Modified: glibc-package/trunk/debian/changelog
===================================================================
--- glibc-package/trunk/debian/changelog	2012-11-12 16:44:24 UTC (rev 5370)
+++ glibc-package/trunk/debian/changelog	2012-11-13 15:54:37 UTC (rev 5371)
@@ -3,6 +3,8 @@
   [ Aurelien Jarno ]
   * debhelper.in/locales.postinst: correctly lookup for the locales-all
     package.  Closes: #692777.
+  * patches/kfreebsd/local-getaddrinfo-freebsd-kernel.diff: update to 
+    fix uninitialised bytes access in getaddrinfo().  Closes: #692433.
 
   [ Jonathan Nieder ]
   * control.in/opt: remove outdated reference to 2.6 kernel from

Modified: glibc-package/trunk/debian/patches/kfreebsd/local-getaddrinfo-freebsd-kernel.diff
===================================================================
--- glibc-package/trunk/debian/patches/kfreebsd/local-getaddrinfo-freebsd-kernel.diff	2012-11-12 16:44:24 UTC (rev 5370)
+++ glibc-package/trunk/debian/patches/kfreebsd/local-getaddrinfo-freebsd-kernel.diff	2012-11-13 15:54:37 UTC (rev 5371)
@@ -1,19 +1,24 @@
 --- a/sysdeps/posix/getaddrinfo.c
 +++ b/sysdeps/posix/getaddrinfo.c
-@@ -2267,8 +2267,15 @@
+@@ -2267,8 +2267,20 @@
  		}
  
  	      socklen_t sl = sizeof (results[i].source_addr);
-+	      struct sockaddr sa = *q->ai_addr;
 +#ifdef __FreeBSD_kernel__
++	      struct sockaddr_in6 sa_in6;
++	      const struct sockaddr *sa = &sa_in6; 
++	      memcpy(&sa_in6, q->ai_addr, q->ai_family == AF_INET6 ?
++		     sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in));
 +	      /* The FreeBSD kernel doesn't allow connections on port 0. Use
 +	         port 1 instead, as on the FreeBSD libc. */
-+	      if (((struct sockaddr_in *)&sa)->sin_port == htons(0))
-+		((struct sockaddr_in *)&sa)->sin_port = htons(1);
++	      if (sa_in6.sin6_port == htons(0))
++		sa_in6.sin6_port = htons(1);
++#else
++	      const struct sockaddr *sa = q->ai_addr;
 +#endif
  	      if (fd != -1
 -		  && __connect (fd, q->ai_addr, q->ai_addrlen) == 0
-+		  && __connect (fd, &sa, q->ai_addrlen) == 0
++		  && __connect (fd, sa, q->ai_addrlen) == 0
  		  && __getsockname (fd,
  				    (struct sockaddr *) &results[i].source_addr,
  				    &sl) == 0)


Reply to: