[PATCH for-11.1] linux-user/aarch64: Fix SHADOW_STACK_SET_TOKEN
Richard Henderson <[email protected]> Wed, 29 Jul 2026 12:17:10 -0700
| Newsgroups | org.nongnu.qemu-arm,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
The token is not computed via TARGET_PAGE_SIZE, but via a fixed 12-bit field. Cc: [email protected] Fixes: ad1afe433fa ("linux-user/aarch64: Implement map_shadow_stack syscall") Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4106 Signed-off-by: Richard Henderson <[email protected]> --- linux-user/syscall.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 740142825d..097d886b06 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -6906,7 +6906,8 @@ static abi_long do_map_shadow_stack(CPUArchState *env, abi_ulong addr, /* Leave an extra empty frame at top-of-stack. */ cap_ptr -= 8; } - cap_val = (cap_ptr & TARGET_PAGE_MASK) | 1; + /* Note the 12 bit field is unaffected by current page size. */ + cap_val = deposit64(cap_ptr, 0, 12, 1); if (put_user_u64(cap_val, cap_ptr)) { /* Allocation succeeded above. */ g_assert_not_reached(); -- 2.43.0