https://git.reactos.org/?p=reactos.git;a=commitdiff;h=04e92516123dd094bcfa3f...
commit 04e92516123dd094bcfa3fd14b4d0d59c8e4eaf0 Author: Jérôme Gardou jerome.gardou@reactos.org AuthorDate: Mon May 10 19:09:53 2021 +0200 Commit: Jérôme Gardou jerome.gardou@reactos.org CommitDate: Mon May 10 19:11:21 2021 +0200
[NTOS:PS] Use KD routine to safely read memory from thread stack
Should fix a crash when hitting TAB+(Whatever I typed that triggerred this) --- ntoskrnl/ps/debug.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-)
diff --git a/ntoskrnl/ps/debug.c b/ntoskrnl/ps/debug.c index b7ea2db32eb..0a2f3e05517 100644 --- a/ntoskrnl/ps/debug.c +++ b/ntoskrnl/ps/debug.c @@ -70,9 +70,24 @@ PspDumpThreads(BOOLEAN IncludeSystem) /* Walk it */ while(Ebp != 0 && Ebp >= (PULONG)Thread->Tcb.StackLimit) { - /* Print what's on the stack */ - DbgPrint("%.8X %.8X%s", Ebp[0], Ebp[1], (i % 8) == 7 ? "\n" : " "); - Ebp = (PULONG)Ebp[0]; + ULONG EbpContent[2]; + ULONG MemoryCopied; + NTSTATUS Status; + + /* Get stack frame content */ + Status = KdpCopyMemoryChunks((ULONG64)(ULONG_PTR)Ebp, + EbpContent, + sizeof(EbpContent), + sizeof(EbpContent), + MMDBG_COPY_UNSAFE, + &MemoryCopied); + if (!NT_SUCCESS(Status) || (MemoryCopied < sizeof(EbpContent))) + { + break; + } + + DbgPrint("%.8X %.8X%s", EbpContent[0], EbpContent[1], (i % 8) == 7 ? "\n" : " "); + Ebp = (PULONG)EbpContent[0]; i++; }