svn commit: r301630 - stable/9/lib/libc/rpc

Garrett Cooper ngie at FreeBSD.org
Wed Jun 8 14:20:56 UTC 2016


Author: ngie
Date: Wed Jun  8 14:20:54 2016
New Revision: 301630
URL: https://svnweb.freebsd.org/changeset/base/301630

Log:
  MFstable/10 r301629:
  
  MFC r300387,r300388,r300389:
  
  r300387:
  
  getnetid(..): consistently fclose fd at the end of the function
  
  This mutes a false positive with cppcheck, but also helps eliminate future
  potential issues with this variable
  
  r300388:
  
  Call endnetconfig on nc_handle sooner to avoid leaking nc_handle if tmpnconf
  was NULL
  
  This would theoretically happen if the netconfig protocol family and protocol
  semantics were never matched.
  
  CID: 978179
  
  r300389:
  
  nis_rpcent: don't leak resultbuf from yp_first(..)/yp_next(..)
  
  If the buffer couldn't be adequately resized to accomodate an additional "\n",
  it would leak resultbuf by breaking from the loop early
  
  CID: 1016702

Modified:
  stable/9/lib/libc/rpc/getrpcent.c
  stable/9/lib/libc/rpc/netnamer.c
  stable/9/lib/libc/rpc/rpcb_clnt.c
Directory Properties:
  stable/9/   (props changed)
  stable/9/lib/   (props changed)
  stable/9/lib/libc/   (props changed)

Modified: stable/9/lib/libc/rpc/getrpcent.c
==============================================================================
--- stable/9/lib/libc/rpc/getrpcent.c	Wed Jun  8 14:18:47 2016	(r301629)
+++ stable/9/lib/libc/rpc/getrpcent.c	Wed Jun  8 14:20:54 2016	(r301630)
@@ -512,6 +512,7 @@ nis_rpcent(void *retval, void *mdata, va
 		    sizeof(char *)) {
 			*errnop = ERANGE;
 			rv = NS_RETURN;
+			free(resultbuf);
 			break;
 		}
 
@@ -521,6 +522,7 @@ nis_rpcent(void *retval, void *mdata, va
 		if (aliases_size < 1) {
 			*errnop = ERANGE;
 			rv = NS_RETURN;
+			free(resultbuf);
 			break;
 		}
 

Modified: stable/9/lib/libc/rpc/netnamer.c
==============================================================================
--- stable/9/lib/libc/rpc/netnamer.c	Wed Jun  8 14:18:47 2016	(r301629)
+++ stable/9/lib/libc/rpc/netnamer.c	Wed Jun  8 14:20:54 2016	(r301630)
@@ -253,6 +253,9 @@ getnetid(key, ret)
 	char           *lookup;
 	int             len;
 #endif
+	int rv;
+
+	rv = 0;
 
 	fd = fopen(NETIDFILE, "r");
 	if (fd == NULL) {
@@ -263,13 +266,11 @@ getnetid(key, ret)
 		return (0);
 #endif
 	}
-	for (;;) {
-		if (fd == NULL)
-			return (0);	/* getnetidyp brings us here */
+	while (fd != NULL) {
 		res = fgets(buf, sizeof(buf), fd);
 		if (res == NULL) {
-			fclose(fd);
-			return (0);
+			rv = 0;
+			goto done;
 		}
 		if (res[0] == '#')
 			continue;
@@ -292,9 +293,8 @@ getnetid(key, ret)
 			lookup[len] = 0;
 			strcpy(ret, lookup);
 			free(lookup);
-			if (fd != NULL)
-				fclose(fd);
-			return (2);
+			rv = 2;
+			goto done;
 #else	/* YP */
 #ifdef DEBUG
 			fprintf(stderr,
@@ -320,10 +320,14 @@ getnetid(key, ret)
 			}
 			if (strcmp(mkey, key) == 0) {
 				strcpy(ret, mval);
-				fclose(fd);
-				return (1);
-
+				rv = 1;
+				goto done;
 			}
 		}
 	}
+
+done:
+	if (fd != NULL)
+		fclose(fd);
+	return (rv);
 }

Modified: stable/9/lib/libc/rpc/rpcb_clnt.c
==============================================================================
--- stable/9/lib/libc/rpc/rpcb_clnt.c	Wed Jun  8 14:18:47 2016	(r301629)
+++ stable/9/lib/libc/rpc/rpcb_clnt.c	Wed Jun  8 14:20:54 2016	(r301630)
@@ -508,6 +508,7 @@ try_nconf:
 					hostname = IN6_LOCALHOST_STRING;
 			}
 		}
+		endnetconfig(nc_handle);
 		if (tmpnconf == NULL) {
 			rpc_createerr.cf_stat = RPC_UNKNOWNPROTO;
 			mutex_unlock(&loopnconf_lock);
@@ -515,7 +516,6 @@ try_nconf:
 		}
 		loopnconf = getnetconfigent(tmpnconf->nc_netid);
 		/* loopnconf is never freed */
-		endnetconfig(nc_handle);
 	}
 	mutex_unlock(&loopnconf_lock);
 	client = getclnthandle(hostname, loopnconf, NULL);


More information about the svn-src-all mailing list