diff options
author | Andreas Kling <kling@serenityos.org> | 2021-02-14 10:38:22 +0100 |
---|---|---|
committer | Andreas Kling <kling@serenityos.org> | 2021-02-14 10:39:48 +0100 |
commit | 781d29a3372ec1f3de97ffc1860f83d4ad1b1f1b (patch) | |
tree | 840c5e3075b0587c3414d3e4cdc830a1640a3ed9 /Kernel/Syscalls | |
parent | 09b1b09c1923c5e82c5500a06c501088ab5ac4ce (diff) | |
download | serenity-781d29a3372ec1f3de97ffc1860f83d4ad1b1f1b.zip |
Kernel+Userland: Give sys$recvfd() an options argument for O_CLOEXEC
@bugaevc pointed out that we shouldn't be setting this flag in
userspace, and he's right of course.
Diffstat (limited to 'Kernel/Syscalls')
-rw-r--r-- | Kernel/Syscalls/sendfd.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/Kernel/Syscalls/sendfd.cpp b/Kernel/Syscalls/sendfd.cpp index 0f420e3911..66f6b4d654 100644 --- a/Kernel/Syscalls/sendfd.cpp +++ b/Kernel/Syscalls/sendfd.cpp @@ -52,7 +52,7 @@ int Process::sys$sendfd(int sockfd, int fd) return local_socket.sendfd(*socket_description, *passing_descriptor); } -int Process::sys$recvfd(int sockfd) +int Process::sys$recvfd(int sockfd, int options) { REQUIRE_PROMISE(recvfd); auto socket_description = file_description(sockfd); @@ -74,7 +74,11 @@ int Process::sys$recvfd(int sockfd) if (received_descriptor_or_error.is_error()) return received_descriptor_or_error.error(); - m_fds[new_fd].set(*received_descriptor_or_error.value(), 0); + u32 fd_flags = 0; + if (options & O_CLOEXEC) + fd_flags |= FD_CLOEXEC; + + m_fds[new_fd].set(*received_descriptor_or_error.value(), fd_flags); return new_fd; } |