diff options
-rw-r--r-- | Kernel/Process.h | 2 | ||||
-rw-r--r-- | Kernel/Syscalls/get_dir_entries.cpp | 10 |
2 files changed, 6 insertions, 6 deletions
diff --git a/Kernel/Process.h b/Kernel/Process.h index 0ec32fc526..263b099cb2 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -261,7 +261,7 @@ public: KResultOr<int> sys$purge(int mode); KResultOr<int> sys$select(const Syscall::SC_select_params*); KResultOr<int> sys$poll(Userspace<const Syscall::SC_poll_params*>); - KResultOr<ssize_t> sys$get_dir_entries(int fd, void*, ssize_t); + KResultOr<ssize_t> sys$get_dir_entries(int fd, Userspace<void*>, ssize_t); KResultOr<int> sys$getcwd(Userspace<char*>, size_t); KResultOr<int> sys$chdir(Userspace<const char*>, size_t); KResultOr<int> sys$fchdir(int fd); diff --git a/Kernel/Syscalls/get_dir_entries.cpp b/Kernel/Syscalls/get_dir_entries.cpp index 627ab8456e..7065a70870 100644 --- a/Kernel/Syscalls/get_dir_entries.cpp +++ b/Kernel/Syscalls/get_dir_entries.cpp @@ -29,18 +29,18 @@ namespace Kernel { -KResultOr<ssize_t> Process::sys$get_dir_entries(int fd, void* buffer, ssize_t size) +KResultOr<ssize_t> Process::sys$get_dir_entries(int fd, Userspace<void*> user_buffer, ssize_t user_size) { REQUIRE_PROMISE(stdio); - if (size < 0) + if (user_size < 0) return EINVAL; auto description = file_description(fd); if (!description) return EBADF; - auto user_buffer = UserOrKernelBuffer::for_user_buffer((u8*)buffer, size); - if (!user_buffer.has_value()) + auto buffer = UserOrKernelBuffer::for_user_buffer(user_buffer, static_cast<size_t>(user_size)); + if (!buffer.has_value()) return EFAULT; - return description->get_dir_entries(user_buffer.value(), size); + return description->get_dir_entries(buffer.value(), user_size); } } |