On Mon, 24 May 2021 at 09:42, Jamie Iles <ja...@nuviainc.com> wrote: > > The DAIF and PAC checks used raise_exception_ra to raise an exception > and unwind CPU state but raise_exception_ra is currently designed for > handling data aborts as the syndrome is partially precomputed and > encoded in the TB and then merged in merge_syn_data_abort when handling > the data abort. Using raise_exception_ra for DAIF and PAC checks > results in an empty syndrome being retrieved from data[2] in > restore_state_to_opc and setting ESR to 0. This manifested as: > > kvm [571]: Unknown exception class: esr: 0x000000 – > Unknown/Uncategorized > > when launching a KVM guest when the host qemu used a CPU supporting > EL2+pointer authentication and enabling pointer authentication in the > guest.
raise_exception() and raise_exception_ra() are supposed to have the same semantics apart from one of them being passed a return address. So perhaps we should look at trying to fix this by making raise_exception_ra() not first carefully set and then very opaquely unconditionally trash env->exception.syndrome... thanks -- PMM