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: