The token is not computed via TARGET_PAGE_SIZE, but via a fixed 12-bit field.
Cc: qemu-stable@nongnu.org
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 <richard.henderson@linaro.org>
---
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