diff options
author | Richard Henderson | 2019-06-10 00:22:49 +0200 |
---|---|---|
committer | Peter Maydell | 2019-06-13 16:14:03 +0200 |
commit | d67ebada159148bfdfde84871338738e4465e985 (patch) | |
tree | 1a22c5021c3d4cee752a06149c42b6dd9f71f488 /target/arm | |
parent | hw/core/bus.c: Only the main system bus can have no parent (diff) | |
download | qemu-d67ebada159148bfdfde84871338738e4465e985.tar.gz qemu-d67ebada159148bfdfde84871338738e4465e985.tar.xz qemu-d67ebada159148bfdfde84871338738e4465e985.zip |
target/arm: Fix output of PAuth Auth
The ARM pseudocode installs the error_code into the original
pointer, not the encrypted pointer. The difference applies
within the 7 bits of pac data; the result should be the sign
extension of bit 55.
Add a testcase to that effect.
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'target/arm')
-rw-r--r-- | target/arm/pauth_helper.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/target/arm/pauth_helper.c b/target/arm/pauth_helper.c index 7f30ae7395..d3194f2043 100644 --- a/target/arm/pauth_helper.c +++ b/target/arm/pauth_helper.c @@ -344,9 +344,9 @@ static uint64_t pauth_auth(CPUARMState *env, uint64_t ptr, uint64_t modifier, if (unlikely(extract64(test, bot_bit, top_bit - bot_bit))) { int error_code = (keynumber << 1) | (keynumber ^ 1); if (param.tbi) { - return deposit64(ptr, 53, 2, error_code); + return deposit64(orig_ptr, 53, 2, error_code); } else { - return deposit64(ptr, 61, 2, error_code); + return deposit64(orig_ptr, 61, 2, error_code); } } return orig_ptr; |