1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 06:17: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

@ -456,7 +456,7 @@ u32 Emulator::virt_syscall(u32 function, u32 arg1, u32 arg2, u32 arg3)
case SC_sendfd:
return virt$sendfd(arg1, arg2);
case SC_recvfd:
return virt$recvfd(arg1);
return virt$recvfd(arg1, arg2);
case SC_open:
return virt$open(arg1);
case SC_pipe:
@ -563,9 +563,9 @@ int Emulator::virt$sendfd(int socket, int fd)
return syscall(SC_sendfd, socket, fd);
}
int Emulator::virt$recvfd(int socket)
int Emulator::virt$recvfd(int socket, int options)
{
return syscall(SC_recvfd, socket);
return syscall(SC_recvfd, socket, options);
}
int Emulator::virt$profiling_enable(pid_t pid)

View file

@ -171,7 +171,7 @@ private:
int virt$ftruncate(int fd, off_t);
mode_t virt$umask(mode_t);
int virt$anon_create(size_t, int);
int virt$recvfd(int);
int virt$recvfd(int, int);
int virt$sendfd(int, int);
int virt$msyscall(FlatPtr);

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