From: Theodore Ts'o Date: Fri, 6 Jan 2006 23:10:02 +0000 (-0500) Subject: Set FD_CLOEXEC on the /dev/random file descriptor used by libuuid X-Git-Tag: E2FSPROGS-1.39-WIP-0330~48 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=2adc320f01906cce0b55fa7bc9fccb24b5640cee;p=thirdparty%2Fe2fsprogs.git Set FD_CLOEXEC on the /dev/random file descriptor used by libuuid This avoids a fd leak across an execve() which was causing problems for the LVM tools. (Addresses Debian Bug: #345832) Signed-off-by: "Theodore Ts'o" --- diff --git a/lib/uuid/ChangeLog b/lib/uuid/ChangeLog index 26a96993d..1a1a9e8a4 100644 --- a/lib/uuid/ChangeLog +++ b/lib/uuid/ChangeLog @@ -1,3 +1,9 @@ +2006-01-06 Theodore Ts'o + + * gen_uuid.c (get_random_fd): Set the FD_CLOEXEC flag on the file + descriptor so that it will get closed across an execve(). + (Addresses Debian Bug #345832) + 2005-12-10 Theodore Ts'o * Makefile.in: Add a dependency to make sure that the diff --git a/lib/uuid/gen_uuid.c b/lib/uuid/gen_uuid.c index 42942aa51..421314a07 100644 --- a/lib/uuid/gen_uuid.c +++ b/lib/uuid/gen_uuid.c @@ -88,6 +88,11 @@ static int get_random_fd(void) fd = open("/dev/urandom", O_RDONLY); if (fd == -1) fd = open("/dev/random", O_RDONLY | O_NONBLOCK); + if (fd >= 0) { + i = fcntl(fd, F_GETFD); + if (i >= 0) + fcntl(fd, F_SETFD, i | FD_CLOEXEC); + } srand((getpid() << 16) ^ getuid() ^ tv.tv_sec ^ tv.tv_usec); } /* Crank the random number generator a few times */