From e46cac58cd0cbc204924c3c9f228da301144fb93 Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Fri, 15 Nov 2002 00:34:28 +0000 Subject: [PATCH] When about to do an execve(), don't reset the O_NONBLOCK flag on any file descriptors that have the close-on-exec flag set, as that will have no effect anyway and might screw something else up if the file descriptor happens to be shared with another process. PR: standards/43335 MFC after: 1 week --- lib/libc_r/uthread/uthread_execve.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/libc_r/uthread/uthread_execve.c b/lib/libc_r/uthread/uthread_execve.c index 612f9039a2e..c0aa31c559c 100644 --- a/lib/libc_r/uthread/uthread_execve.c +++ b/lib/libc_r/uthread/uthread_execve.c @@ -69,6 +69,10 @@ _execve(const char *name, char *const * argv, char *const * envp) /* Check if this file descriptor is in use: */ if (_thread_fd_table[i] != NULL && (_thread_fd_getflags(i) & O_NONBLOCK) == 0) { + /* Skip if the close-on-exec flag is set */ + flags = __sys_fcntl(i, F_GETFD, NULL); + if ((flags & FD_CLOEXEC) != 0) + continue; /* don't bother, no point */ /* Get the current flags: */ flags = __sys_fcntl(i, F_GETFL, NULL); /* Clear the nonblocking file descriptor flag: */