KVM: arm64: nv: Add kvm_has_pauth() helper
Pointer Authentication comes in many flavors, and a faithful emulation relies on correctly handling the flavour implemented by the HW. For this, provide a new kvm_has_pauth() that checks whether we expose to the guest a particular level of support. This checks across all 3 possible authentication algorithms (Q5, Q3 and IMPDEF). Reviewed-by: Oliver Upton <oliver.upton@linux.dev> Link: https://lore.kernel.org/r/20240419102935.1935571-12-maz@kernel.org Signed-off-by: Marc Zyngier <maz@kernel.org>
This commit is contained in:
parent
15db034733
commit
719f5206a8
@ -1336,4 +1336,19 @@ bool kvm_arm_vcpu_stopped(struct kvm_vcpu *vcpu);
|
||||
(get_idreg_field((kvm), id, fld) >= expand_field_sign(id, fld, min) && \
|
||||
get_idreg_field((kvm), id, fld) <= expand_field_sign(id, fld, max))
|
||||
|
||||
/* Check for a given level of PAuth support */
|
||||
#define kvm_has_pauth(k, l) \
|
||||
({ \
|
||||
bool pa, pi, pa3; \
|
||||
\
|
||||
pa = kvm_has_feat((k), ID_AA64ISAR1_EL1, APA, l); \
|
||||
pa &= kvm_has_feat((k), ID_AA64ISAR1_EL1, GPA, IMP); \
|
||||
pi = kvm_has_feat((k), ID_AA64ISAR1_EL1, API, l); \
|
||||
pi &= kvm_has_feat((k), ID_AA64ISAR1_EL1, GPI, IMP); \
|
||||
pa3 = kvm_has_feat((k), ID_AA64ISAR2_EL1, APA3, l); \
|
||||
pa3 &= kvm_has_feat((k), ID_AA64ISAR2_EL1, GPA3, IMP); \
|
||||
\
|
||||
(pa + pi + pa3) == 1; \
|
||||
})
|
||||
|
||||
#endif /* __ARM64_KVM_HOST_H__ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user