mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-12-18 05:28:36 -07:00
If low-address-protection is active, unaligned stores to non-protected
parts of lowcore lead to protection exceptions. The reason is that in
such cases tlb_fill() call in store_helper_unaligned() covers
[0, addr + size) range, which contains the protected portion of
lowcore. This range is too large.
The most straightforward fix would be to make sure we stay within the
original [addr, addr + size) range. However, if an unaligned access
affects a single page, we don't need to call tlb_fill() in
store_helper_unaligned() at all, since it would be identical to
the previous tlb_fill() call in store_helper(), and therefore a no-op.
If an unaligned access covers multiple pages, this situation does not
occur.
Therefore simply skip TLB handling in store_helper_unaligned() if we
are dealing with a single page.
Fixes:
|
||
|---|---|---|
| .. | ||
| hvf | ||
| kvm | ||
| qtest | ||
| stubs | ||
| tcg | ||
| xen | ||
| accel-common.c | ||
| accel-softmmu.c | ||
| accel-softmmu.h | ||
| accel-user.c | ||
| dummy-cpus.c | ||
| Kconfig | ||
| meson.build | ||