[Glibc-bsd-commits] r4303 - in trunk/kfreebsd-9/debian: . patches
Steven Chamberlain
stevenc-guest at alioth.debian.org
Fri Jun 15 12:29:24 UTC 2012
Author: stevenc-guest
Date: 2012-06-15 12:29:24 +0000 (Fri, 15 Jun 2012)
New Revision: 4303
Added:
trunk/kfreebsd-9/debian/patches/EN-12_02.ipv6refcount.patch
Modified:
trunk/kfreebsd-9/debian/changelog
trunk/kfreebsd-9/debian/patches/series
Log:
Apply upstream EN-12:02.ipv6refcount patch
Modified: trunk/kfreebsd-9/debian/changelog
===================================================================
--- trunk/kfreebsd-9/debian/changelog 2012-06-13 20:21:43 UTC (rev 4302)
+++ trunk/kfreebsd-9/debian/changelog 2012-06-15 12:29:24 UTC (rev 4303)
@@ -2,8 +2,9 @@
[ Steven Chamberlain ]
* Apply upstream SA-12:04.sysret patch (CVE-2012-0217) (Closes: #677298)
+ * Apply upstream EN-12:02.ipv6refcount patch
- -- GNU/kFreeBSD Maintainers <debian-bsd at lists.debian.org> Wed, 13 Jun 2012 13:42:57 +0100
+ -- GNU/kFreeBSD Maintainers <debian-bsd at lists.debian.org> Fri, 15 Jun 2012 13:15:39 +0100
kfreebsd-9 (9.0-3) unstable; urgency=low
Added: trunk/kfreebsd-9/debian/patches/EN-12_02.ipv6refcount.patch
===================================================================
--- trunk/kfreebsd-9/debian/patches/EN-12_02.ipv6refcount.patch (rev 0)
+++ trunk/kfreebsd-9/debian/patches/EN-12_02.ipv6refcount.patch 2012-06-15 12:29:24 UTC (rev 4303)
@@ -0,0 +1,128 @@
+Description:
+ Fix reference count errors in IPv6 code. [EN-12:02]
+Origin: vendor, http://security.freebsd.org/patches/EN-12:02/ipv6refcount.patch
+Bug: http://security.freebsd.org/advisories/FreeBSD-EN-12:02.ipv6refcount.asc
+Applied-Upstream: http://svnweb.freebsd.org/base?view=revision&revision=236953
+
+--- a/sys/netinet6/in6.c.orig
++++ b/sys/netinet6/in6.c
+@@ -1369,6 +1369,8 @@ in6_purgeaddr(struct ifaddr *ifa)
+ }
+
+ cleanup:
++ if (ifa0 != NULL)
++ ifa_free(ifa0);
+
+ plen = in6_mask2len(&ia->ia_prefixmask.sin6_addr, NULL); /* XXX */
+ if ((ia->ia_flags & IFA_ROUTE) && plen == 128) {
+@@ -1393,8 +1395,6 @@ cleanup:
+ return;
+ ia->ia_flags &= ~IFA_ROUTE;
+ }
+- if (ifa0 != NULL)
+- ifa_free(ifa0);
+
+ in6_unlink_ifa(ia, ifp);
+ }
+@@ -1667,14 +1667,19 @@ in6_lifaddr_ioctl(struct socket *so, u_long cmd, c
+ hostid = IFA_IN6(ifa);
+
+ /* prefixlen must be <= 64. */
+- if (64 < iflr->prefixlen)
++ if (64 < iflr->prefixlen) {
++ if (ifa != NULL)
++ ifa_free(ifa);
+ return EINVAL;
++ }
+ prefixlen = iflr->prefixlen;
+
+ /* hostid part must be zero. */
+ sin6 = (struct sockaddr_in6 *)&iflr->addr;
+ if (sin6->sin6_addr.s6_addr32[2] != 0 ||
+ sin6->sin6_addr.s6_addr32[3] != 0) {
++ if (ifa != NULL)
++ ifa_free(ifa);
+ return EINVAL;
+ }
+ } else
+@@ -2265,14 +2265,20 @@ in6_ifawithifp(struct ifnet *ifp, struct in6_addr
+ IN6_IFADDR_RUNLOCK();
+ return (struct in6_ifaddr *)ifa;
+ }
+- IN6_IFADDR_RUNLOCK();
+
+ /* use the last-resort values, that are, deprecated addresses */
+- if (dep[0])
++ if (dep[0]) {
++ ifa_ref((struct ifaddr *)dep[0]);
++ IN6_IFADDR_RUNLOCK();
+ return dep[0];
+- if (dep[1])
++ }
++ if (dep[1]) {
++ ifa_ref((struct ifaddr *)dep[1]);
++ IN6_IFADDR_RUNLOCK();
+ return dep[1];
++ }
+
++ IN6_IFADDR_RUNLOCK();
+ return NULL;
+ }
+
+--- a/sys/netinet6/ip6_input.c.orig
++++ b/sys/netinet6/ip6_input.c
+@@ -879,19 +879,23 @@ passin:
+ * as our interface address (e.g. multicast addresses, addresses
+ * within FAITH prefixes and such).
+ */
+- if (deliverifp && !ip6_getdstifaddr(m)) {
++ if (deliverifp) {
+ struct in6_ifaddr *ia6;
+
+- ia6 = in6_ifawithifp(deliverifp, &ip6->ip6_dst);
+- if (ia6) {
+- if (!ip6_setdstifaddr(m, ia6)) {
+- /*
+- * XXX maybe we should drop the packet here,
+- * as we could not provide enough information
+- * to the upper layers.
+- */
++ if ((ia6 = ip6_getdstifaddr(m)) != NULL) {
++ ifa_free(&ia6->ia_ifa);
++ } else {
++ ia6 = in6_ifawithifp(deliverifp, &ip6->ip6_dst);
++ if (ia6) {
++ if (!ip6_setdstifaddr(m, ia6)) {
++ /*
++ * XXX maybe we should drop the packet here,
++ * as we could not provide enough information
++ * to the upper layers.
++ */
++ }
++ ifa_free(&ia6->ia_ifa);
+ }
+- ifa_free(&ia6->ia_ifa);
+ }
+ }
+
+--- a/sys/netinet/tcp_input.c.orig
++++ b/sys/netinet/tcp_input.c
+@@ -512,6 +512,8 @@ tcp6_input(struct mbuf **mp, int *offp, int proto)
+ (caddr_t)&ip6->ip6_dst - (caddr_t)ip6);
+ return IPPROTO_DONE;
+ }
++ if (ia6)
++ ifa_free(&ia6->ia_ifa);
+
+ tcp_input(m, *offp);
+ return IPPROTO_DONE;
+@@ -1240,7 +1242,8 @@ relocked:
+ rstreason = BANDLIM_RST_OPENPORT;
+ goto dropwithreset;
+ }
+- ifa_free(&ia6->ia_ifa);
++ if (ia6)
++ ifa_free(&ia6->ia_ifa);
+ }
+ #endif /* INET6 */
+ /*
Modified: trunk/kfreebsd-9/debian/patches/series
===================================================================
--- trunk/kfreebsd-9/debian/patches/series 2012-06-13 20:21:43 UTC (rev 4302)
+++ trunk/kfreebsd-9/debian/patches/series 2012-06-15 12:29:24 UTC (rev 4303)
@@ -3,6 +3,7 @@
remove_tmpfs_warning.diff
amd64_increase_DFLDSIZ.diff
SA-12_04.sysret.patch
+EN-12_02.ipv6refcount.patch
# Other patches that might or might not be mergeable
001_misc.diff
More information about the Glibc-bsd-commits
mailing list