Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Jan 2017 02:31:05 +0000 (UTC)
From:      Ngie Cooper <ngie@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r311227 - head/contrib/netbsd-tests/lib/libc/gen
Message-ID:  <201701040231.v042V5WV032983@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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 */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201701040231.v042V5WV032983>