Author: ngie
Date: Wed Jun  8 14:18:47 2016
New Revision: 301629
URL: https://svnweb.freebsd.org/changeset/base/301629

Log:
  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/10/lib/libc/rpc/getrpcent.c
  stable/10/lib/libc/rpc/netnamer.c
  stable/10/lib/libc/rpc/rpcb_clnt.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/lib/libc/rpc/getrpcent.c
==============================================================================
--- stable/10/lib/libc/rpc/getrpcent.c  Wed Jun  8 14:15:29 2016        
(r301628)
+++ stable/10/lib/libc/rpc/getrpcent.c  Wed Jun  8 14:18:47 2016        
(r301629)
@@ -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/10/lib/libc/rpc/netnamer.c
==============================================================================
--- stable/10/lib/libc/rpc/netnamer.c   Wed Jun  8 14:15:29 2016        
(r301628)
+++ stable/10/lib/libc/rpc/netnamer.c   Wed Jun  8 14:18:47 2016        
(r301629)
@@ -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/10/lib/libc/rpc/rpcb_clnt.c
==============================================================================
--- stable/10/lib/libc/rpc/rpcb_clnt.c  Wed Jun  8 14:15:29 2016        
(r301628)
+++ stable/10/lib/libc/rpc/rpcb_clnt.c  Wed Jun  8 14:18:47 2016        
(r301629)
@@ -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);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to