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)


-- 
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: http://lists.debian.org/[email protected]

Reply via email to