Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 5 Jun 2012 13:27:37 +0000 (UTC)
From:      "Bjoern A. Zeeb" <bz@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r236615 - head/sys/netinet6
Message-ID:  <201206051327.q55DRbut022183@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: bz
Date: Tue Jun  5 13:27:37 2012
New Revision: 236615
URL: http://svn.freebsd.org/changeset/base/236615

Log:
  Plug two interface address refcount leaks in early error return cases
  in the ioctl path.
  
  Reported by:	rpaulo
   Reviewed by:	emax
  MFC after:	3 days

Modified:
  head/sys/netinet6/in6.c

Modified: head/sys/netinet6/in6.c
==============================================================================
--- head/sys/netinet6/in6.c	Tue Jun  5 12:34:08 2012	(r236614)
+++ head/sys/netinet6/in6.c	Tue Jun  5 13:27:37 2012	(r236615)
@@ -1667,14 +1667,19 @@ in6_lifaddr_ioctl(struct socket *so, u_l
 			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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201206051327.q55DRbut022183>