diff options
author | Viktor Prutyanov <viktor.prutyanov@redhat.com> | 2022-10-20 02:59:48 +0300 |
---|---|---|
committer | Marc-André Lureau <marcandre.lureau@redhat.com> | 2022-10-26 12:55:00 +0400 |
commit | e38c24cb580735883769558801d9e2f2ba9f04c1 (patch) | |
tree | 98ef6afdf9f58a0ab936ed3da73e48ad21cb2461 | |
parent | 113d8f4e95cf0450bea421263de6ec016c779ad0 (diff) | |
download | qemu-e38c24cb580735883769558801d9e2f2ba9f04c1.zip qemu-e38c24cb580735883769558801d9e2f2ba9f04c1.tar.gz qemu-e38c24cb580735883769558801d9e2f2ba9f04c1.tar.bz2 |
dump/win_dump: limit number of processed PRCBs
When number of CPUs utilized by guest Windows is less than defined in
QEMU (i.e., desktop versions of Windows severely limits number of CPU
sockets), patch_and_save_context routine accesses non-existent PRCB and
fails. So, limit number of processed PRCBs by NumberProcessors taken
from guest Windows driver.
Signed-off-by: Viktor Prutyanov <viktor.prutyanov@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20221019235948.656411-1-viktor.prutyanov@redhat.com>
-rw-r--r-- | dump/win_dump.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/dump/win_dump.c b/dump/win_dump.c index fd91350..f20b605 100644 --- a/dump/win_dump.c +++ b/dump/win_dump.c @@ -273,6 +273,13 @@ static void patch_and_save_context(WinDumpHeader *h, bool x64, uint64_t Context; WinContext ctx; + if (i >= WIN_DUMP_FIELD(NumberProcessors)) { + warn_report("win-dump: number of QEMU CPUs is bigger than" + " NumberProcessors (%u) in guest Windows", + WIN_DUMP_FIELD(NumberProcessors)); + return; + } + if (cpu_read_ptr(x64, first_cpu, KiProcessorBlock + i * win_dump_ptr_size(x64), &Prcb)) { |