Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Jan 2017 00:26:52 +0000 (UTC)
From:      Ngie Cooper <ngie@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-10@freebsd.org
Subject:   svn commit: r312091 - stable/10/contrib/netbsd-tests/lib/libc/gen
Message-ID:  <201701140026.v0E0QqYY051962@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ngie
Date: Sat Jan 14 00:26:52 2017
New Revision: 312091
URL: https://svnweb.freebsd.org/changeset/base/312091

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/10/contrib/netbsd-tests/lib/libc/gen/t_dir.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/contrib/netbsd-tests/lib/libc/gen/t_dir.c
==============================================================================
--- stable/10/contrib/netbsd-tests/lib/libc/gen/t_dir.c	Sat Jan 14 00:26:50 2017	(r312090)
+++ stable/10/contrib/netbsd-tests/lib/libc/gen/t_dir.c	Sat Jan 14 00:26:52 2017	(r312091)
@@ -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
 }
 
 ATF_TC(telldir_leak);



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