]> git.ipfire.org Git - thirdparty/dbus.git/commitdiff
Bug 15947: Close file descriptors before execing helper (Markus Rechberger)
authorColin Walters <walters@verbum.org>
Wed, 28 May 2008 20:01:22 +0000 (16:01 -0400)
committerColin Walters <walters@verbum.org>
Wed, 28 May 2008 20:01:22 +0000 (16:01 -0400)
* dbus/dbus-sysdeps-unix.c (_dbus_get_autolaunch_address):
Close file descriptors before exec.

dbus/dbus-sysdeps-unix.c

index 19858dd3dede7a882d8ade6b3c4a89b139ae03c1..a66d07108d20f531b14ee3a35ee2c241422d7a91 100644 (file)
@@ -2848,7 +2848,10 @@ _dbus_get_autolaunch_address (DBusString *address,
   if (pid == 0)
     {
       /* child process */
-      int fd = open ("/dev/null", O_RDWR);
+      int maxfds;
+      int fd;
+
+      fd = open ("/dev/null", O_RDWR);
       if (fd == -1)
         /* huh?! can't open /dev/null? */
         _exit (1);
@@ -2869,9 +2872,15 @@ _dbus_get_autolaunch_address (DBusString *address,
       if (dup2 (errors_pipe[WRITE_END], 2) == -1)
         _exit (1);
 
-      close (fd);
-      close (address_pipe[WRITE_END]);
-      close (errors_pipe[WRITE_END]);
+      maxfds = sysconf (_SC_OPEN_MAX);
+      /* Pick something reasonable if for some reason sysconf
+       * says unlimited.
+       */
+      if (maxfds < 0)
+        maxfds = 1024;
+      /* close all inherited fds */
+      for (i = 3; i < maxfds; i++)
+        close (i);
 
       execv (DBUS_BINDIR "/dbus-launch", argv);