Index: signalpipe.c =================================================================== --- signalpipe.c (revision 14725) +++ signalpipe.c (working copy) @@ -20,6 +20,7 @@ */ #include +#include #include #include #include @@ -43,6 +44,8 @@ static void signal_handler(int sig) void udhcp_sp_setup(void) { socketpair(AF_UNIX, SOCK_STREAM, 0, signal_pipe); + fcntl(signal_pipe[0], F_SETFD, FD_CLOEXEC); + fcntl(signal_pipe[1], F_SETFD, FD_CLOEXEC); signal(SIGUSR1, signal_handler); signal(SIGUSR2, signal_handler); signal(SIGTERM, signal_handler); @@ -56,7 +59,10 @@ int udhcp_sp_fd_set(fd_set *rfds, int ex { FD_ZERO(rfds); FD_SET(signal_pipe[0], rfds); - if (extra_fd >= 0) FD_SET(extra_fd, rfds); + if (extra_fd >= 0) { + fcntl(extra_fd, F_SETFD, FD_CLOEXEC); + FD_SET(extra_fd, rfds); + } return signal_pipe[0] > extra_fd ? signal_pipe[0] : extra_fd; }