From df5ea97c51e63f84ce30e8db9d8617b035e2ac38 Mon Sep 17 00:00:00 2001 From: Itamar Date: Sat, 2 Jan 2021 12:03:28 +0200 Subject: [PATCH] Kernel: Release scheduler_lock in ptrace once we know tracee is stopped This fixes a kernel crash that occured when calling ptrace with PT_PEEK on non paged-in memory. The crash occurred because we were holding the scheduler lock while trying to read from the disk's block device, which we do not allow. Fixes #4740 --- Kernel/Ptrace.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Kernel/Ptrace.cpp b/Kernel/Ptrace.cpp index 552c9656dd..90b65e0370 100644 --- a/Kernel/Ptrace.cpp +++ b/Kernel/Ptrace.cpp @@ -86,6 +86,8 @@ KResultOr handle_syscall(const Kernel::Syscall::SC_ptrace_params& params, P if (peer->state() == Thread::State::Running) return KResult(-EBUSY); + scheduler_lock.unlock(); + switch (params.request) { case PT_CONTINUE: peer->send_signal(SIGCONT, &caller);