diff --git a/lib/libutil/login_auth.c b/lib/libutil/login_auth.c
index ce9a2e47c316..1fc7e73d6bc3 100644
--- a/lib/libutil/login_auth.c
+++ b/lib/libutil/login_auth.c
@@ -98,7 +98,7 @@ auth_cat(const char *file)
   int fd, count;
   char buf[BUFSIZ];
 
-  if ((fd = open(file, O_RDONLY)) < 0)
+  if ((fd = open(file, O_RDONLY | O_CLOEXEC)) < 0)
     return 0;
   while ((count = read(fd, buf, sizeof(buf))) > 0)
     (void)write(fileno(stdout), buf, count);
diff --git a/lib/libutil/login_cap.c b/lib/libutil/login_cap.c
index 8fee76050b04..8915d0af279e 100644
--- a/lib/libutil/login_cap.c
+++ b/lib/libutil/login_cap.c
@@ -239,7 +239,7 @@ login_getclassbyname(char const *name, const struct passwd *pwd)
 		break;	/* Don't retry default on 'me' */
 	    if (i == 0)
 	        r = -1;
-	    else if ((r = open(login_dbarray[0], O_RDONLY)) >= 0)
+	    else if ((r = open(login_dbarray[0], O_RDONLY | O_CLOEXEC)) >= 0)
 	        close(r);
 	    /*
 	     * If there's at least one login class database,
diff --git a/lib/libutil/pidfile.c b/lib/libutil/pidfile.c
index 7949e9e9a034..3a5e5121c147 100644
--- a/lib/libutil/pidfile.c
+++ b/lib/libutil/pidfile.c
@@ -73,7 +73,7 @@ pidfile_read(const char *path, pid_t *pidptr)
 	char buf[16], *endptr;
 	int error, fd, i;
 
-	fd = open(path, O_RDONLY);
+	fd = open(path, O_RDONLY | O_CLOEXEC);
 	if (fd == -1)
 		return (errno);
 
diff --git a/lib/libutil/quotafile.c b/lib/libutil/quotafile.c
index 03e3de4e4937..6b5a44d9cdf7 100644
--- a/lib/libutil/quotafile.c
+++ b/lib/libutil/quotafile.c
@@ -137,7 +137,7 @@ quota_open(struct fstab *fs, int quotatype, int openflags)
 		goto error;
 	}
 	qf->accmode = openflags & O_ACCMODE;
-	if ((qf->fd = open(qf->qfname, qf->accmode)) < 0 &&
+	if ((qf->fd = open(qf->qfname, qf->accmode|O_CLOEXEC)) < 0 &&
 	    (openflags & O_CREAT) != O_CREAT)
 		goto error;
 	/* File open worked, so process it */
@@ -168,7 +168,8 @@ quota_open(struct fstab *fs, int quotatype, int openflags)
 		/* not reached */
 	}
 	/* open failed, but O_CREAT was specified, so create a new file */
-	if ((qf->fd = open(qf->qfname, O_RDWR|O_CREAT|O_TRUNC, 0)) < 0)
+	if ((qf->fd = open(qf->qfname, O_RDWR|O_CREAT|O_TRUNC|O_CLOEXEC, 0)) <
+	    0)
 		goto error;
 	qf->wordsize = 64;
 	memset(&dqh, 0, sizeof(dqh));
@@ -534,7 +535,8 @@ quota_convert(struct quotafile *qf, int wordsize)
 		free(newqf);
 		return (-1);
 	}
-	if ((newqf->fd = open(qf->qfname, O_RDWR|O_CREAT|O_TRUNC, 0)) < 0) {
+	if ((newqf->fd = open(qf->qfname, O_RDWR|O_CREAT|O_TRUNC|O_CLOEXEC,
+	    0)) < 0) {
 		serrno = errno;
 		goto error;
 	}
diff --git a/lib/libutil/uucplock.c b/lib/libutil/uucplock.c
index afbfaa4d0537..424ac26651e1 100644
--- a/lib/libutil/uucplock.c
+++ b/lib/libutil/uucplock.c
@@ -76,7 +76,8 @@ uu_lock(const char *tty_name)
 			pid);
 	(void)snprintf(lckname, sizeof(lckname), _PATH_UUCPLOCK LOCKFMT,
 			tty_name);
-	if ((tmpfd = creat(lcktmpname, 0664)) < 0)
+	if ((tmpfd = open(lcktmpname, O_CREAT | O_TRUNC | O_WRONLY | O_CLOEXEC,
+	    0664)) < 0)
 		GORET(0, UU_LOCK_CREAT_ERR);
 
 	for (i = 0; i < MAXTRIES; i++) {
@@ -88,7 +89,7 @@ uu_lock(const char *tty_name)
 			 * check to see if the process holding the lock
 			 * still exists
 			 */
-			if ((fd = open(lckname, O_RDONLY)) < 0)
+			if ((fd = open(lckname, O_RDONLY | O_CLOEXEC)) < 0)
 				GORET(1, UU_LOCK_OPEN_ERR);
 
 			if ((pid_old = get_pid (fd, &err)) == -1)
@@ -132,7 +133,7 @@ uu_lock_txfr(const char *tty_name, pid_t pid)
 
 	snprintf(lckname, sizeof(lckname), _PATH_UUCPLOCK LOCKFMT, tty_name);
 
-	if ((fd = open(lckname, O_RDWR)) < 0)
+	if ((fd = open(lckname, O_RDWR | O_CLOEXEC)) < 0)
 		return UU_LOCK_OWNER_ERR;
 	if (get_pid(fd, &err) != getpid())
 		err = UU_LOCK_OWNER_ERR;