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.

Backports commit d67ebada159148bfdfde84871338738e4465e985 from qemu
This commit is contained in:
Richard Henderson 2019-06-13 16:16:56 -04:00 committed by Lioncash
parent 230f8a091a
commit afaea6a291
No known key found for this signature in database
GPG Key ID: 4E3C3CC1031BA9C7

View File

@ -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;