summaryrefslogtreecommitdiff
path: root/Kernel/Syscalls
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2021-02-14 10:38:22 +0100
committerAndreas Kling <kling@serenityos.org>2021-02-14 10:39:48 +0100
commit781d29a3372ec1f3de97ffc1860f83d4ad1b1f1b (patch)
tree840c5e3075b0587c3414d3e4cdc830a1640a3ed9 /Kernel/Syscalls
parent09b1b09c1923c5e82c5500a06c501088ab5ac4ce (diff)
downloadserenity-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.cpp8
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;
}