qemu/target
Alexander Graf 363d385dbf target/i386: Fix legacy page table walk
Commit b56617bbcb ("target/i386: Walk NPT in guest real mode") added
logic to run the page table walker even in real mode if we are in NPT
mode.  That function then determined whether real mode or paging is
active based on whether the pg_mode variable was 0.

Unfortunately pg_mode is 0 in two situations:

  1) Paging is disabled (real mode)
  2) Paging is in 2-level paging mode (32bit without PAE)

That means the walker now assumed that 2-level paging mode was real
mode, breaking NetBSD as well as Windows XP.

To fix that, this patch adds a new PG flag to pg_mode which indicates
whether paging is active at all and uses that to determine whether we
are in real mode or not.

Cc: qemu-stable@nongnu.org
Resolves: https://gitlab.com/qemu-project/qemu/-/issues/2654
Fixes: b56617bbcb ("target/i386: Walk NPT in guest real mode")
Fixes: 253c0a06e0 (commit b56617bbcb in stable-8.2.x series)
Signed-off-by: Alexander Graf <graf@amazon.com>
Reported-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Link: https://lore.kernel.org/r/20241106154329.67218-1-graf@amazon.com
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
(cherry picked from commit 8fa11a4df3)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
2024-11-13 18:18:25 +03:00
..
alpha hw/cpu: Call object_class_is_abstract() once in cpu_class_by_name() 2023-11-07 13:08:48 +01:00
arm target/arm: Fix SVE SDOT/UDOT/USDOT (4-way, indexed) 2024-11-10 11:09:44 +03:00
avr hw/avr/atmega: Fix wrong initial value of stack pointer 2023-11-28 14:27:12 +01:00
cris hw/cpu: Call object_class_is_abstract() once in cpu_class_by_name() 2023-11-07 13:08:48 +01:00
hexagon target/hexagon: don't look for static glib 2024-08-28 08:37:15 +03:00
hppa target/hppa: Fix PSW V-bit packaging in cpu_hppa_get for hppa64 2024-09-05 23:00:34 +03:00
i386 target/i386: Fix legacy page table walk 2024-11-13 18:18:25 +03:00
loongarch target/loongarch: fix a wrong print in cpu dump 2024-06-07 08:10:45 +03:00
m68k target/m68k: Always return a temporary from gen_lea_mode 2024-10-10 21:08:58 +03:00
microblaze target: Move ArchCPUClass definition to 'cpu.h' 2023-11-07 13:08:48 +01:00
mips target: Move ArchCPUClass definition to 'cpu.h' 2023-11-07 13:08:48 +01:00
nios2 target: Move ArchCPUClass definition to 'cpu.h' 2023-11-07 13:08:48 +01:00
openrisc hw/cpu: Call object_class_is_abstract() once in cpu_class_by_name() 2023-11-07 13:08:48 +01:00
ppc target/ppc: Fix mtDPDES targeting SMT siblings 2024-11-10 11:09:44 +03:00
riscv target/riscv: Fix vcompress with rvv_ta_all_1s 2024-11-10 11:09:44 +03:00
rx target/rx: Use target_ulong for address in LI 2024-08-28 08:37:14 +03:00
s390x target/s390x: Use mutable temporary value for op_ts 2024-03-25 22:13:29 +03:00
sh4 target/sh4: Fix SUBV opcode 2024-05-04 09:37:20 +03:00
sparc target/sparc: Restrict STQF to sparcv9 2024-08-28 08:37:15 +03:00
tricore hw/cpu: Call object_class_is_abstract() once in cpu_class_by_name() 2023-11-07 13:08:48 +01:00
xtensa target/xtensa: fix OOB TLB entry access 2024-01-27 18:04:54 +03:00
Kconfig hw/loongarch: Add support loongson3 virt machine type. 2022-06-06 18:09:03 +00:00
meson.build target/loongarch: Add target build suport 2022-06-06 18:09:03 +00:00