diff options
author | Guy Helmer <ghelmer@FreeBSD.org> | 2012-01-11 16:35:26 +0000 |
---|---|---|
committer | Guy Helmer <ghelmer@FreeBSD.org> | 2012-01-11 16:35:26 +0000 |
commit | 656b6da7e3a4f8373ae85f62419de8e6f54feb8a (patch) | |
tree | 94e62c2d6a53bd454f708567e70912052b5a7774 /lib/libutil | |
parent | 844d43d94b0e0380a8b6c29982c0783a590f734b (diff) | |
download | src-656b6da7e3a4f8373ae85f62419de8e6f54feb8a.tar.gz src-656b6da7e3a4f8373ae85f62419de8e6f54feb8a.zip |
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.
Notes
Notes:
svn path=/head/; revision=229966
Diffstat (limited to 'lib/libutil')
-rw-r--r-- | lib/libutil/pidfile.c | 15 |
1 files changed, 1 insertions, 14 deletions
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; @@ -139,19 +139,6 @@ pidfile_open(const char *path, mode_t mode, pid_t *pidptr) } /* - * 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. */ |