From b85c8a0b8091e704ba21fd0631b82a0f6949d612 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Tue, 26 Apr 2022 14:32:12 +0200 Subject: [PATCH] Kernel: Add FIOCLEX and FIONCLEX ioctls These allow you to turn the close-on-exec flag on/off via ioctl(). --- Kernel/Syscalls/ioctl.cpp | 12 ++++++++++++ Userland/Libraries/LibC/sys/ioctl_numbers.h | 2 ++ 2 files changed, 14 insertions(+) diff --git a/Kernel/Syscalls/ioctl.cpp b/Kernel/Syscalls/ioctl.cpp index 9b333c61d9..ccbe9d7681 100644 --- a/Kernel/Syscalls/ioctl.cpp +++ b/Kernel/Syscalls/ioctl.cpp @@ -19,6 +19,18 @@ ErrorOr Process::sys$ioctl(int fd, unsigned request, FlatPtr arg) description->set_blocking(TRY(copy_typed_from_user(Userspace(arg))) == 0); return 0; } + if (request == FIOCLEX) { + m_fds.with_exclusive([&](auto& fds) { + fds[fd].set_flags(fds[fd].flags() | FD_CLOEXEC); + }); + return 0; + } + if (request == FIONCLEX) { + m_fds.with_exclusive([&](auto& fds) { + fds[fd].set_flags(fds[fd].flags() & ~FD_CLOEXEC); + }); + return 0; + } TRY(description->file().ioctl(*description, request, arg)); return 0; } diff --git a/Userland/Libraries/LibC/sys/ioctl_numbers.h b/Userland/Libraries/LibC/sys/ioctl_numbers.h index 02920b37df..2a97ea41ab 100644 --- a/Userland/Libraries/LibC/sys/ioctl_numbers.h +++ b/Userland/Libraries/LibC/sys/ioctl_numbers.h @@ -119,6 +119,8 @@ enum IOCtlNumber { FIBMAP, FIONBIO, FIONREAD, + FIOCLEX, + FIONCLEX, KCOV_SETBUFSIZE, KCOV_ENABLE, KCOV_DISABLE,