Sfoglia il codice sorgente

LibCore: Make sockets close-on-exec by default

This mirrors the previous default in Core::LocalSocket, and is the safer
default anyway. This prevents fds from living on in other processes when
exec() is called in certain programs such as Assistant.

Fixes #12029.
sin-ack 3 anni fa
parent
commit
3de51a4b99
1 ha cambiato i file con 8 aggiunte e 1 eliminazioni
  1. 8 1
      Userland/Libraries/LibCore/Stream.cpp

+ 8 - 1
Userland/Libraries/LibCore/Stream.cpp

@@ -241,7 +241,14 @@ ErrorOr<int> Socket::create_fd(SocketDomain domain, SocketType type)
         VERIFY_NOT_REACHED();
     }
 
-    return System::socket(socket_domain, socket_type, 0);
+    // Let's have a safe default of CLOEXEC. :^)
+#ifdef SOCK_CLOEXEC
+    return System::socket(socket_domain, socket_type | SOCK_CLOEXEC, 0);
+#else
+    auto fd = TRY(System::socket(socket_domain, socket_type, 0));
+    TRY(System::fcntl(fd, F_SETFD, FD_CLOEXEC));
+    return fd;
+#endif
 }
 
 ErrorOr<IPv4Address> Socket::resolve_host(String const& host, SocketType type)