lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 7 Apr 2022 15:12:57 +0200 From: Paolo Bonzini <pbonzini@...hat.com> To: Sagi Shahar <sagis@...gle.com>, "Yamahata, Isaku" <isaku.yamahata@...el.com> Cc: kvm@...r.kernel.org, linux-kernel@...r.kernel.org, isaku.yamahata@...il.com, Jim Mattson <jmattson@...gle.com>, Erdem Aktas <erdemaktas@...gle.com>, Connor Kuehl <ckuehl@...hat.com>, Sean Christopherson <seanjc@...gle.com> Subject: Re: [RFC PATCH v5 083/104] KVM: x86: Split core of hypercall emulation to helper function On 3/21/22 19:32, Sagi Shahar wrote: > On Fri, Mar 4, 2022 at 12:00 PM <isaku.yamahata@...el.com> wrote: >> >> From: Sean Christopherson <sean.j.christopherson@...el.com> >> >> By necessity, TDX will use a different register ABI for hypercalls. >> Break out the core functionality so that it may be reused for TDX. >> >> Signed-off-by: Sean Christopherson <sean.j.christopherson@...el.com> >> Signed-off-by: Isaku Yamahata <isaku.yamahata@...el.com> >> --- >> arch/x86/include/asm/kvm_host.h | 4 +++ >> arch/x86/kvm/x86.c | 54 ++++++++++++++++++++------------- >> 2 files changed, 37 insertions(+), 21 deletions(-) >> >> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h >> index 8dab9f16f559..33b75b0e3de1 100644 >> --- a/arch/x86/include/asm/kvm_host.h >> +++ b/arch/x86/include/asm/kvm_host.h >> @@ -1818,6 +1818,10 @@ void kvm_request_apicv_update(struct kvm *kvm, bool activate, >> void __kvm_request_apicv_update(struct kvm *kvm, bool activate, >> unsigned long bit); >> >> +unsigned long __kvm_emulate_hypercall(struct kvm_vcpu *vcpu, unsigned long nr, >> + unsigned long a0, unsigned long a1, >> + unsigned long a2, unsigned long a3, >> + int op_64_bit); >> int kvm_emulate_hypercall(struct kvm_vcpu *vcpu); >> >> int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, u64 error_code, >> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c >> index 314ae43e07bf..9acb33a17445 100644 >> --- a/arch/x86/kvm/x86.c >> +++ b/arch/x86/kvm/x86.c >> @@ -9090,26 +9090,15 @@ static int complete_hypercall_exit(struct kvm_vcpu *vcpu) >> return kvm_skip_emulated_instruction(vcpu); >> } >> >> -int kvm_emulate_hypercall(struct kvm_vcpu *vcpu) >> +unsigned long __kvm_emulate_hypercall(struct kvm_vcpu *vcpu, unsigned long nr, >> + unsigned long a0, unsigned long a1, >> + unsigned long a2, unsigned long a3, >> + int op_64_bit) >> { >> - unsigned long nr, a0, a1, a2, a3, ret; >> - int op_64_bit; >> - >> - if (kvm_xen_hypercall_enabled(vcpu->kvm)) >> - return kvm_xen_hypercall(vcpu); >> - >> - if (kvm_hv_hypercall_enabled(vcpu)) >> - return kvm_hv_hypercall(vcpu); Please keep Xen and Hyper-V hypercalls to kvm_emulate_hypercall (more on this in the reply to patch 89). __kvm_emulate_hypercall should only handle KVM hypercalls. >> + if (static_call(kvm_x86_get_cpl)(vcpu) != 0) { >> + ret = -KVM_EPERM; >> + goto out; >> + } Is this guaranteed by TDG.VP.VMCALL? Paolo >> + ret = __kvm_emulate_hypercall(vcpu, nr, a0, a1, a2, a3, op_64_bit); >> out: >> if (!op_64_bit) >> ret = (u32)ret; >> -- >> 2.25.1 >> > > Sagi >
Powered by blists - more mailing lists