Author: ngie
Date: Mon Mar 20 03:06:37 2017
New Revision: 315609
URL: https://svnweb.freebsd.org/changeset/base/315609

Log:
  MFC r315199,r315200,r315203:
  
  r315199:
  
  sbin/dhclient: fix a memory leak in parse_client_lease_statement(..)
  
  The memory stored by `lease` would have previously been leaked if an
  unterminated lease declaration was found in an early-return code path.
  
  CID:          1007114
  
  r315200:
  
  Fix -Wunused-but-set-warning with `ret`
  
  While here, resolve Coverity warnings by demonstrating that vfprintf's
  return value is being explicitly ignored.
  
  Tested with:  clang, gcc 4.2.1, gcc 6.3.0
  
  r315203:
  
  sbin/dhclient: fix `vendor` storage leak in parse_option_decl(..)
  
  This ensures the storage isn't leaked when non-NULL and the function
  returns early, prior to the `free(vendor)` later on in the function.
  
  CID:          1007111-1007113

Modified:
  stable/11/sbin/dhclient/clparse.c
  stable/11/sbin/dhclient/tests/fake.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sbin/dhclient/clparse.c
==============================================================================
--- stable/11/sbin/dhclient/clparse.c   Mon Mar 20 03:01:23 2017        
(r315608)
+++ stable/11/sbin/dhclient/clparse.c   Mon Mar 20 03:06:37 2017        
(r315609)
@@ -510,6 +510,7 @@ parse_client_lease_statement(FILE *cfile
                token = peek_token(&val, cfile);
                if (token == EOF) {
                        parse_warn("unterminated lease declaration.");
+                       free_client_lease(lease);
                        return;
                }
                if (token == RBRACE)
@@ -711,6 +712,7 @@ parse_option_decl(FILE *cfile, struct op
                        parse_warn("expecting identifier after '.'");
                        if (token != SEMI)
                                skip_to_semi(cfile);
+                       free(vendor);
                        return (NULL);
                }
 
@@ -723,6 +725,7 @@ parse_option_decl(FILE *cfile, struct op
                if (!universe) {
                        parse_warn("no vendor named %s.", vendor);
                        skip_to_semi(cfile);
+                       free(vendor);
                        return (NULL);
                }
        } else {
@@ -744,6 +747,7 @@ parse_option_decl(FILE *cfile, struct op
                        parse_warn("no option named %s for vendor %s",
                                    val, vendor);
                skip_to_semi(cfile);
+               free(vendor);
                return (NULL);
        }
 

Modified: stable/11/sbin/dhclient/tests/fake.c
==============================================================================
--- stable/11/sbin/dhclient/tests/fake.c        Mon Mar 20 03:01:23 2017        
(r315608)
+++ stable/11/sbin/dhclient/tests/fake.c        Mon Mar 20 03:06:37 2017        
(r315609)
@@ -14,7 +14,7 @@ error(char *fmt, ...)
        va_list ap;
 
        va_start(ap, fmt);
-       vfprintf(stderr, fmt, ap);
+       (void)vfprintf(stderr, fmt, ap);
        va_end(ap);
        fprintf(stderr, "\n");
 
@@ -24,11 +24,10 @@ error(char *fmt, ...)
 int
 warning(char *fmt, ...)
 {
-       int ret;
        va_list ap;
 
        va_start(ap, fmt);
-       ret = vfprintf(stderr, fmt, ap);
+       (void)vfprintf(stderr, fmt, ap);
        va_end(ap);
        fprintf(stderr, "\n");
 
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "[email protected]"

Reply via email to