From 656b6da7e3a4f8373ae85f62419de8e6f54feb8a Mon Sep 17 00:00:00 2001 From: Guy Helmer Date: Wed, 11 Jan 2012 16:35:26 +0000 Subject: jilles pointed out that O_CLOEXEC could be used in the open(2) flags rather than using fcntl(2) later, and in addition to saving a system call, removes a possible race with fork/exec from threads or signal handlers. --- lib/libutil/pidfile.c | 15 +-------------- 1 file changed, 1 insertion(+), 14 deletions(-) (limited to 'lib/libutil') diff --git a/lib/libutil/pidfile.c b/lib/libutil/pidfile.c index ba9575678b2b..60f81fd5d0ad 100644 --- a/lib/libutil/pidfile.c +++ b/lib/libutil/pidfile.c @@ -117,7 +117,7 @@ pidfile_open(const char *path, mode_t mode, pid_t *pidptr) * pidfile_write() can be called multiple times. */ fd = flopen(pfh->pf_path, - O_WRONLY | O_CREAT | O_TRUNC | O_NONBLOCK, mode); + O_WRONLY | O_CREAT | O_TRUNC | O_CLOEXEC | O_NONBLOCK, mode); if (fd == -1) { if (errno == EWOULDBLOCK && pidptr != NULL) { count = 20; @@ -138,19 +138,6 @@ pidfile_open(const char *path, mode_t mode, pid_t *pidptr) return (NULL); } - /* - * Prevent the file descriptor from escaping to other - * programs via exec(3). - */ - if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) { - error = errno; - unlink(pfh->pf_path); - close(fd); - free(pfh); - errno = error; - return (NULL); - } - /* * Remember file information, so in pidfile_write() we are sure we write * to the proper descriptor. -- cgit v1.2.3