From 3de51a4b997a73854cc9626a6176093062f70cb0 Mon Sep 17 00:00:00 2001 From: sin-ack Date: Fri, 21 Jan 2022 14:11:36 +0000 Subject: 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. --- Userland/Libraries/LibCore/Stream.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Userland/Libraries/LibCore/Stream.cpp b/Userland/Libraries/LibCore/Stream.cpp index 76643d9c9e..e8f26757b2 100644 --- a/Userland/Libraries/LibCore/Stream.cpp +++ b/Userland/Libraries/LibCore/Stream.cpp @@ -241,7 +241,14 @@ ErrorOr 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 Socket::resolve_host(String const& host, SocketType type) -- cgit v1.2.3