From owner-svn-src-stable@freebsd.org Wed Jun 8 17:17:04 2016 Return-Path: Delivered-To: svn-src-stable@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id E6C96B6FD6F; Wed, 8 Jun 2016 17:17:04 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id A65521205; Wed, 8 Jun 2016 17:17:04 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u58HH3fP024407; Wed, 8 Jun 2016 17:17:03 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u58HH3ei024406; Wed, 8 Jun 2016 17:17:03 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201606081717.u58HH3ei024406@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Garrett Cooper Date: Wed, 8 Jun 2016 17:17:03 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org Subject: svn commit: r301650 - stable/9/usr.sbin/rpcbind X-SVN-Group: stable-9 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-stable@freebsd.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: SVN commit messages for all the -stable branches of the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jun 2016 17:17:05 -0000 Author: ngie Date: Wed Jun 8 17:17:03 2016 New Revision: 301650 URL: https://svnweb.freebsd.org/changeset/base/301650 Log: MFstable/10 r301636: MFC r300867,r300932,r300934,r300941,r300972,r300973: r300867: Only expose `hint_uaddr` in the ND_DEBUG case This fixes a -Wunused-but-set-variable warning with gcc r300932: Catch malloc(3) errors and socket(2) errors - malloc failing will result in a delayed segfault - socket failing will result in delayed failures with setsockopt Exit in the event that either of these high-level conditions are met. CID: 976288, 976321, 976858 r300934: Plug leak with ifp by calling freeifaddrs after calling getifaddrs Obtained from: NetBSD v1.18 r300941: Don't leak res in network_init(..) Call freeaddrinfo on it after it's been used CID: 1225050 r300972 (by markj): Fix rpcbind init after r300941. - getaddrinfo() sets res = NULL on failure and freeaddrinfo() always dereferences its argument, so we should only free the address list after a successful call. - Address a second potential leak caused by getaddrinfo(AF_INET6) overwriting the address list returned by getaddrinfo(AF_INET). X-MFC-With: r300941 r300973: Follow up to r300932 In the event MK_INET6 != no in userspace, but is disabled in the kernel, or if there aren't any IPv6 addresses configured in userspace (for lo0 and all physical interfaces), rpcbind would terminate immediately instead of silently failing on Skip over the IPv6 block to its respective cleanup with freeifaddrs if creating the socket failed instead of terminating rpcbind immediately Modified: stable/9/usr.sbin/rpcbind/util.c Directory Properties: stable/9/ (props changed) stable/9/usr.sbin/ (props changed) Modified: stable/9/usr.sbin/rpcbind/util.c ============================================================================== --- stable/9/usr.sbin/rpcbind/util.c Wed Jun 8 17:13:57 2016 (r301649) +++ stable/9/usr.sbin/rpcbind/util.c Wed Jun 8 17:17:03 2016 (r301650) @@ -142,7 +142,9 @@ addrmerge(struct netbuf *caller, const c struct sockaddr_storage ss; struct netconfig *nconf; char *caller_uaddr = NULL; +#ifdef ND_DEBUG const char *hint_uaddr = NULL; +#endif char *ret = NULL; int bestif_goodness; @@ -163,13 +165,17 @@ addrmerge(struct netbuf *caller, const c */ hint_sa = NULL; if (clnt_uaddr != NULL) { +#ifdef ND_DEBUG hint_uaddr = clnt_uaddr; +#endif if ((hint_nbp = uaddr2taddr(nconf, clnt_uaddr)) == NULL) goto freeit; hint_sa = hint_nbp->buf; } if (hint_sa == NULL || hint_sa->sa_family != caller_sa->sa_family) { +#ifdef ND_DEBUG hint_uaddr = caller_uaddr; +#endif hint_sa = caller->buf; }