qemu/accel
Peter Maydell b16930ecb9 include/user/guest-host.h: Provide g2h etc for both abi_ptr and vaddr
In commit 7804c84a ("include/user: Use vaddr in guest-host.h") we
changed all the functions in guest-host.h that took or returned their
guest address argument in type abi_ptr to instead use vaddr.

This introduced regressions for the case of a 32-bit guest and an
address above 2GB for the common situation where the address is a
syscall argument stored in a variable of type 'abi_long'.  With
abi_ptr (which will be an unsigned 32-bit type for 32-bit guests),
the address is cast to unsigned 32-bit, and then zero-extended to
64-bits in g2h_untagged_vaddr().  With the switch to vaddr (which is
always a 64-bit unsigned type), the guest address will instead be
sign-extended to 64 bits, which gives the wrong answer.

Fix this by providing two versions of the affected functions: the
standard names (g2h(), g2h_untagged(), guest_addr_valid_untagged(),
guest_range_valid_untagged(), cpu_untagged_addr()) return to using
the logically-correct abi_ptr type; new versions with a _vaddr()
prefix use the vaddr type.

accel/tcg/user-exec.c must change to use the _vaddr() versions; this
is the only file that uses guest-host.h that we want to compile once.
All the other uses are in linux-user and bsd-user code that
inherently has to know the sizes of target-ABI types.

Cc: qemu-stable@nongnu.org
Fixes: 7804c84a ("include/user: Use vaddr in guest-host.h")
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3333
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Message-id: 20260330143123.1685142-3-peter.maydell@linaro.org
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
(cherry picked from commit 8330da591e)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
2026-05-14 22:28:26 +03:00
..
hvf accel/hvf: Fix i386 HVF compilation failures 2025-12-01 21:21:16 +01:00
kvm kvm: Fix kvm_vm_ioctl() and kvm_device_ioctl() return value 2025-12-02 07:46:21 +01:00
mshv accel/mshv: initialize thread name 2025-10-28 14:50:06 +01:00
qtest accel: Extract AccelClass definition to 'accel/accel-ops.h' 2025-07-15 19:34:33 +02:00
stubs accel/mshv: Initialize VM partition 2025-10-08 19:17:30 +02:00
tcg include/user/guest-host.h: Provide g2h etc for both abi_ptr and vaddr 2026-05-14 22:28:26 +03:00
xen accel: Extract AccelClass definition to 'accel/accel-ops.h' 2025-07-15 19:34:33 +02:00
accel-blocker.c include: Rename sysemu/ -> system/ 2024-12-20 17:44:56 +01:00
accel-common.c accel: Extract AccelClass definition to 'accel/accel-ops.h' 2025-07-15 19:34:33 +02:00
accel-internal.h accel: Include missing 'qemu/accel.h' header in accel-internal.h 2025-04-25 17:09:58 +02:00
accel-irq.c hw/intc: Generalize APIC helper names from kvm_* to accel_* 2025-10-08 19:17:29 +02:00
accel-qmp.c accel/system: Introduce @x-accel-stats QMP command 2025-07-15 19:34:33 +02:00
accel-system.c accel/system: Add 'info accel' on human monitor 2025-07-15 19:34:33 +02:00
accel-target.c accel: Move target-agnostic code from accel-target.c -> accel-common.c 2025-04-25 17:09:58 +02:00
accel-user.c accel: Implement accel_init_ops_interfaces() for both system/user mode 2025-04-25 17:09:58 +02:00
dummy-cpus.c accel: make all calls to qemu_process_cpu_events look the same 2025-09-17 19:00:56 +02:00
dummy-cpus.h accel/dummy: Extract 'dummy-cpus.h' header from 'system/cpus.h' 2025-07-04 14:43:46 +02:00
Kconfig accel: Add Meson and config support for MSHV accelerator 2025-10-08 19:17:27 +02:00
meson.build accel/mshv: Add accelerator skeleton 2025-10-08 19:17:29 +02:00