Author: ngie
Date: Wed Jan  4 02:31:05 2017
New Revision: 311227
URL: https://svnweb.freebsd.org/changeset/base/311227

Log:
  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)
  
  MFC after:    1 week
  Reported by:  Coverity
  CID:          975255, 975256, 976989, 978989, 978990

Modified:
  head/contrib/netbsd-tests/lib/libc/gen/t_dir.c

Modified: head/contrib/netbsd-tests/lib/libc/gen/t_dir.c
==============================================================================
--- head/contrib/netbsd-tests/lib/libc/gen/t_dir.c      Wed Jan  4 02:25:31 
2017        (r311226)
+++ head/contrib/netbsd-tests/lib/libc/gen/t_dir.c      Wed Jan  4 02:31:05 
2017        (r311227)
@@ -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))),  \
+                   "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 */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to