mirror of
https://github.com/torvalds/linux.git
synced 2026-05-21 21:37:25 +02:00
KVM: x86: Route non-canonical checks in emulator through emulate_ops
Add emulate_ops.is_canonical_addr() to perform (non-)canonical checks in the emulator, which will allow extending is_noncanonical_address() to support different flavors of canonical checks, e.g. for descriptor table bases vs. MSRs, without needing duplicate logic in the emulator. No functional change is intended. Signed-off-by: Maxim Levitsky <mlevitsk@redhat.com> Link: https://lore.kernel.org/r/20240906221824.491834-3-mlevitsk@redhat.com [sean: separate from additional of flags, massage changelog] Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
e52ad1ddd0
commit
16ccadefa2
|
|
@ -653,7 +653,7 @@ static inline u8 ctxt_virt_addr_bits(struct x86_emulate_ctxt *ctxt)
|
|||
static inline bool emul_is_noncanonical_address(u64 la,
|
||||
struct x86_emulate_ctxt *ctxt)
|
||||
{
|
||||
return !__is_canonical_address(la, ctxt_virt_addr_bits(ctxt));
|
||||
return !ctxt->ops->is_canonical_addr(ctxt, la);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -235,6 +235,8 @@ struct x86_emulate_ops {
|
|||
|
||||
gva_t (*get_untagged_addr)(struct x86_emulate_ctxt *ctxt, gva_t addr,
|
||||
unsigned int flags);
|
||||
|
||||
bool (*is_canonical_addr)(struct x86_emulate_ctxt *ctxt, gva_t addr);
|
||||
};
|
||||
|
||||
/* Type, address-of, and value of an instruction's operand. */
|
||||
|
|
|
|||
|
|
@ -8619,6 +8619,12 @@ static gva_t emulator_get_untagged_addr(struct x86_emulate_ctxt *ctxt,
|
|||
addr, flags);
|
||||
}
|
||||
|
||||
static bool emulator_is_canonical_addr(struct x86_emulate_ctxt *ctxt,
|
||||
gva_t addr)
|
||||
{
|
||||
return !is_noncanonical_address(addr, emul_to_vcpu(ctxt));
|
||||
}
|
||||
|
||||
static const struct x86_emulate_ops emulate_ops = {
|
||||
.vm_bugged = emulator_vm_bugged,
|
||||
.read_gpr = emulator_read_gpr,
|
||||
|
|
@ -8665,6 +8671,7 @@ static const struct x86_emulate_ops emulate_ops = {
|
|||
.triple_fault = emulator_triple_fault,
|
||||
.set_xcr = emulator_set_xcr,
|
||||
.get_untagged_addr = emulator_get_untagged_addr,
|
||||
.is_canonical_addr = emulator_is_canonical_addr,
|
||||
};
|
||||
|
||||
static void toggle_interruptibility(struct kvm_vcpu *vcpu, u32 mask)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user