diff --git a/Kernel/Process.h b/Kernel/Process.h index 05f9cbe94b..e4148148bb 100644 --- a/Kernel/Process.h +++ b/Kernel/Process.h @@ -326,14 +326,14 @@ public: u32 m_ticks_in_user_for_dead_children { 0 }; u32 m_ticks_in_kernel_for_dead_children { 0 }; - bool validate_read_from_kernel(VirtualAddress, size_t) const; + [[nodiscard]] bool validate_read_from_kernel(VirtualAddress, size_t) const; - bool validate_read(const void*, size_t) const; - bool validate_write(void*, size_t) const; + [[nodiscard]] bool validate_read(const void*, size_t) const; + [[nodiscard]] bool validate_write(void*, size_t) const; template - bool validate_read_typed(T* value, size_t count = 1) { return validate_read(value, sizeof(T) * count); } + [[nodiscard]] bool validate_read_typed(T* value, size_t count = 1) { return validate_read(value, sizeof(T) * count); } template - bool validate_read_and_copy_typed(T* dest, const T* src) + [[nodiscard]] bool validate_read_and_copy_typed(T* dest, const T* src) { bool validated = validate_read_typed(src); if (validated) { @@ -342,14 +342,14 @@ public: return validated; } template - bool validate_write_typed(T* value, size_t count = 1) { return validate_write(value, sizeof(T) * count); } + [[nodiscard]] bool validate_write_typed(T* value, size_t count = 1) { return validate_write(value, sizeof(T) * count); } template - bool validate(const Syscall::MutableBufferArgument&); + [[nodiscard]] bool validate(const Syscall::MutableBufferArgument&); template - bool validate(const Syscall::ImmutableBufferArgument&); + [[nodiscard]] bool validate(const Syscall::ImmutableBufferArgument&); - String validate_and_copy_string_from_user(const char*, size_t) const; - String validate_and_copy_string_from_user(const Syscall::StringArgument&) const; + [[nodiscard]] String validate_and_copy_string_from_user(const char*, size_t) const; + [[nodiscard]] String validate_and_copy_string_from_user(const Syscall::StringArgument&) const; Custody& current_directory(); Custody* executable() { return m_executable.ptr(); } diff --git a/Kernel/Ptrace.cpp b/Kernel/Ptrace.cpp index f6f5d946d5..ca91e66913 100644 --- a/Kernel/Ptrace.cpp +++ b/Kernel/Ptrace.cpp @@ -113,7 +113,8 @@ KResultOr handle_syscall(const Kernel::Syscall::SC_ptrace_params& params, P auto result = peer->process().peek_user_data(peek_params.address); if (result.is_error()) return -EFAULT; - peer->process().validate_write(peek_params.out_data, sizeof(u32)); + if (!peer->process().validate_write(peek_params.out_data, sizeof(u32))) + return -EFAULT; copy_from_user(peek_params.out_data, &result.value()); break; }