]> git.wh0rd.org - patches.git/blobdiff - udhcp-close-fds.patch
more random patches. who knows.
[patches.git] / udhcp-close-fds.patch
diff --git a/udhcp-close-fds.patch b/udhcp-close-fds.patch
new file mode 100644 (file)
index 0000000..ad6ac5c
--- /dev/null
@@ -0,0 +1,33 @@
+Index: signalpipe.c
+===================================================================
+--- signalpipe.c       (revision 14725)
++++ signalpipe.c       (working copy)
+@@ -20,6 +20,7 @@
+  */
+ #include <unistd.h>
++#include <fcntl.h>
+ #include <signal.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+@@ -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;
+ }