Author: ngie
Date: Sat Jan 14 00:26:50 2017
New Revision: 312090
URL: https://svnweb.freebsd.org/changeset/base/312090

Log:
  MFC r311227,r311917:
  
  r311227:
  
  seekdir_basic: fix various Coverity issues
  
  Address..
  - .. resource leaks of file descriptors and memory
  - .. unchecked return values from creat(2), mkdir(2), and telldir(3)
  - .. potential NULL derefs after calling readdir(3)
  
  CID:          975255, 975256, 976989, 978989, 978990
  
  r311917:
  
  Fix up r311227
  
  Check for creat returning a value != -1, not a non-zero value
  
  Pointyhat to: ngie
  CID:          1368366

Modified:
  stable/11/contrib/netbsd-tests/lib/libc/gen/t_dir.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/contrib/netbsd-tests/lib/libc/gen/t_dir.c
==============================================================================
--- stable/11/contrib/netbsd-tests/lib/libc/gen/t_dir.c Sat Jan 14 00:24:46 
2017        (r312089)
+++ stable/11/contrib/netbsd-tests/lib/libc/gen/t_dir.c Sat Jan 14 00:26:50 
2017        (r312090)
@@ -39,6 +39,10 @@
 
 #include <sys/stat.h>
 
+#ifdef __FreeBSD__
+#include <errno.h>
+#endif
+
 ATF_TC(seekdir_basic);
 ATF_TC_HEAD(seekdir_basic, tc)
 {
@@ -54,10 +58,26 @@ ATF_TC_BODY(seekdir_basic, tc)
        struct dirent *entry;
        long here;
 
+#ifdef __FreeBSD__
+#define        CREAT(x, m)     do {                                            
\
+               int _creat_fd;                                          \
+               ATF_REQUIRE_MSG((_creat_fd = creat((x), (m))) != -1,    \
+                   "creat(%s, %x) failed: %s", (x), (m),               \
+                   strerror(errno));                                   \
+               (void)close(_creat_fd);                                 \
+       } while(0);
+
+       ATF_REQUIRE_MSG(mkdir("t", 0755) == 0,
+           "mkdir failed: %s", strerror(errno));
+       CREAT("t/a", 0600);
+       CREAT("t/b", 0600);
+       CREAT("t/c", 0600);
+#else
        mkdir("t", 0755);
        creat("t/a", 0600);
        creat("t/b", 0600);
        creat("t/c", 0600);
+#endif
 
        dp = opendir("t");
        if ( dp == NULL)
@@ -70,9 +90,17 @@ ATF_TC_BODY(seekdir_basic, tc)
        /* get first entry */
        entry = readdir(dp);
        here = telldir(dp);
+#ifdef __FreeBSD__
+       ATF_REQUIRE_MSG(here != -1,
+           "telldir failed: %s", strerror(errno));
+#endif
 
        /* get second entry */
        entry = readdir(dp);
+#ifdef __FreeBSD__
+       ATF_REQUIRE_MSG(entry != NULL,
+           "readdir failed: %s", strerror(errno));
+#endif
        wasname = strdup(entry->d_name);
        if (wasname == NULL)
                atf_tc_fail("cannot allocate memory");
@@ -109,6 +137,9 @@ ATF_TC_BODY(seekdir_basic, tc)
                atf_tc_fail("3rd seekdir found wrong name");
 
        closedir(dp);
+#ifdef __FreeBSD__
+       free(wasname);
+#endif
 }
 
 /* There is no sbrk on AArch64 and RISC-V */
_______________________________________________
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