1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 10:47:35 +00:00

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.
This commit is contained in:
Andreas Kling 2021-02-14 10:38:22 +01:00
parent 09b1b09c19
commit 781d29a337
7 changed files with 15 additions and 15 deletions

View file

@ -151,9 +151,9 @@ int sendfd(int sockfd, int fd)
__RETURN_WITH_ERRNO(rc, rc, -1);
}
int recvfd(int sockfd)
int recvfd(int sockfd, int options)
{
int rc = syscall(SC_recvfd, sockfd);
int rc = syscall(SC_recvfd, sockfd, options);
__RETURN_WITH_ERRNO(rc, rc, -1);
}
}

View file

@ -152,7 +152,7 @@ int setsockopt(int sockfd, int level, int option, const void*, socklen_t);
int getsockname(int sockfd, struct sockaddr*, socklen_t*);
int getpeername(int sockfd, struct sockaddr*, socklen_t*);
int sendfd(int sockfd, int fd);
int recvfd(int sockfd);
int recvfd(int sockfd, int options);
// These three are non-POSIX, but common:
#define CMSG_ALIGN(x) (((x) + sizeof(void*) - 1) & ~(sizeof(void*) - 1))

View file

@ -171,15 +171,11 @@ bool Decoder::decode(Dictionary& dictionary)
bool Decoder::decode([[maybe_unused]] File& file)
{
#ifdef __serenity__
int fd = recvfd(m_sockfd);
int fd = recvfd(m_sockfd, O_CLOEXEC);
if (fd < 0) {
dbgln("recvfd: {}", strerror(errno));
return false;
}
if (fcntl(fd, F_SETFD, FD_CLOEXEC) < 0) {
dbgln("fcntl(F_SETFD, FD_CLOEXEC): {}", strerror(errno));
return false;
}
file = File(fd, File::ConstructWithReceivedFileDescriptor);
return true;
#else