From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-22.4 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,MENTIONS_GIT_HOSTING,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id BF427C5517A for ; Wed, 28 Oct 2020 01:47:52 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 823FF22202 for ; Wed, 28 Oct 2020 01:47:52 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="ZV3b04sK" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726078AbgJ1Bic (ORCPT ); Tue, 27 Oct 2020 21:38:32 -0400 Received: from mail-yb1-f194.google.com ([209.85.219.194]:38431 "EHLO mail-yb1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1832994AbgJ0XT5 (ORCPT ); Tue, 27 Oct 2020 19:19:57 -0400 Received: by mail-yb1-f194.google.com with SMTP id b138so2697542yba.5 for ; Tue, 27 Oct 2020 16:19:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=ZxA/FTzW2i1d24RS8IAJvgkUnZ1daeCJad8ZQtHPyjw=; b=ZV3b04sKyAaIqU6I+07pnq7LItgyzOJZINCJ8GoWSTTPVIMukV6X/LG0pxhXTmHkf9 85DxHPmw6TLUULyhxLOvwxlMSLY1HKupqIlRsiozckcTJ7mpCbmjDOzypWIG8GyB5/4a 4XHEQHsyv+qQdue/uzR1XKIhDk+uEhNba33GbHT3QqCR+PlbLGPOUxN10uauNfa2bdd1 fWjzE9cNg6N852LKGtgxRaQYO0zryOokP/MuSxzaRMXTMp8YMdp3g6KomBCqpTMjjQJQ DPuXnUnrtSVTfTgID2XEQ3borI8Dw+/S4jijpvtqyPLYtFmwZyhWYiqdAOdISnYnKuse UqtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=ZxA/FTzW2i1d24RS8IAJvgkUnZ1daeCJad8ZQtHPyjw=; b=SmX+P0BviahLWPumYuVwgqYkr8Ox8yE5funy6NoEH5xK9BdVqRD2EQIRk9/qSwfT7D 7YaIvlut/fSVv7OMMOoxdBK5HnxsqrKrZjwPOjeZkFiB0kDjPo5Xb4+cZbno/MUimcL4 j8Vde2QKbUQqCkUTidFcnD7N3qYu+OCPbzQCNhTv5AXgRpHMQqfIy804tf6LDUVh1Bzm hVOB470CgVXxLDkY7BcIE10WIM84k6AWZFnVBquCvUvDW4ldAXP+rZlY+e3CtHme5Qwl MEFFIzY8hyxL65xAFIQs2umTL6gG42aHi/yiu8WqXWDmfSfITzql1AedZPP3jZQwN86o eAOg== X-Gm-Message-State: AOAM532Z6mVUAIVz9bgy5QnjudYY+/xkPJ2SbrtE16QWxvxAFa5G39Ah CuoiYU2vG6qRAKn3u4rZJVg7rmk7539q20xPkgK17Ed+zDGiupTj X-Google-Smtp-Source: ABdhPJwW8JFlnoJfrFbun3wyL7kmjVW4jY8gPVUIRb3NnGb+2Fq0mYfoVDuSHrqVaY8RCM3KsyFaM8EbRQOSlr8Kk88= X-Received: by 2002:a25:da92:: with SMTP id n140mr6448310ybf.275.1603840795951; Tue, 27 Oct 2020 16:19:55 -0700 (PDT) MIME-Version: 1.0 References: <20200907131613.12703-65-joro@8bytes.org> <159972972557.20229.773744278485296601.tip-bot2@tip-bot2> In-Reply-To: <159972972557.20229.773744278485296601.tip-bot2@tip-bot2> From: Erdem Aktas Date: Tue, 27 Oct 2020 16:19:45 -0700 Message-ID: Subject: Re: [tip: x86/seves] x86/vmware: Add VMware-specific handling for VMMCALL under SEV-ES To: linux-kernel@vger.kernel.org, "Lendacky, Thomas" , dcovelli@vmware.com Cc: linux-tip-commits@vger.kernel.org, Joerg Roedel , Borislav Petkov , x86 Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Looking at the VMWARE_VMCALL(cmd, eax, ebx, ecx, edx) definition, it seems to me only 4 registers are required to be shared with hypervisor. I don't know much about vmware but is not vmware_sev_es_hcall_prepare expose more registers than needed and also vmware_sev_es_hcall_finish might let the hypvervisor to modify additional registers which are not used? Just checking if this is intentional and what I am missing here. Thanks -Erdem On Thu, Sep 10, 2020 at 2:23 AM tip-bot2 for Doug Covelli wrote: > > The following commit has been merged into the x86/seves branch of tip: > > Commit-ID: 1a222de8dcfb903d039810b0823570ee0be4e6c6 > Gitweb: https://git.kernel.org/tip/1a222de8dcfb903d039810b0823570ee0be4e6c6 > Author: Doug Covelli > AuthorDate: Mon, 07 Sep 2020 15:16:05 +02:00 > Committer: Borislav Petkov > CommitterDate: Wed, 09 Sep 2020 11:33:20 +02:00 > > x86/vmware: Add VMware-specific handling for VMMCALL under SEV-ES > > Add VMware-specific handling for #VC faults caused by VMMCALL > instructions. > > Signed-off-by: Doug Covelli > Signed-off-by: Tom Lendacky > [ jroedel@suse.de: - Adapt to different paravirt interface ] > Co-developed-by: Joerg Roedel > Signed-off-by: Joerg Roedel > Signed-off-by: Borislav Petkov > Link: https://lkml.kernel.org/r/20200907131613.12703-65-joro@8bytes.org > --- > arch/x86/kernel/cpu/vmware.c | 50 +++++++++++++++++++++++++++++++---- > 1 file changed, 45 insertions(+), 5 deletions(-) > > diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c > index 9b6fafa..924571f 100644 > --- a/arch/x86/kernel/cpu/vmware.c > +++ b/arch/x86/kernel/cpu/vmware.c > @@ -33,6 +33,7 @@ > #include > #include > #include > +#include > > #undef pr_fmt > #define pr_fmt(fmt) "vmware: " fmt > @@ -476,10 +477,49 @@ static bool __init vmware_legacy_x2apic_available(void) > (eax & (1 << VMWARE_CMD_LEGACY_X2APIC)) != 0; > } > > +#ifdef CONFIG_AMD_MEM_ENCRYPT > +static void vmware_sev_es_hcall_prepare(struct ghcb *ghcb, > + struct pt_regs *regs) > +{ > + /* Copy VMWARE specific Hypercall parameters to the GHCB */ > + ghcb_set_rip(ghcb, regs->ip); > + ghcb_set_rbx(ghcb, regs->bx); > + ghcb_set_rcx(ghcb, regs->cx); > + ghcb_set_rdx(ghcb, regs->dx); > + ghcb_set_rsi(ghcb, regs->si); > + ghcb_set_rdi(ghcb, regs->di); > + ghcb_set_rbp(ghcb, regs->bp); > +} > + > +static bool vmware_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs) > +{ > + if (!(ghcb_rbx_is_valid(ghcb) && > + ghcb_rcx_is_valid(ghcb) && > + ghcb_rdx_is_valid(ghcb) && > + ghcb_rsi_is_valid(ghcb) && > + ghcb_rdi_is_valid(ghcb) && > + ghcb_rbp_is_valid(ghcb))) > + return false; > + > + regs->bx = ghcb->save.rbx; > + regs->cx = ghcb->save.rcx; > + regs->dx = ghcb->save.rdx; > + regs->si = ghcb->save.rsi; > + regs->di = ghcb->save.rdi; > + regs->bp = ghcb->save.rbp; > + > + return true; > +} > +#endif > + > const __initconst struct hypervisor_x86 x86_hyper_vmware = { > - .name = "VMware", > - .detect = vmware_platform, > - .type = X86_HYPER_VMWARE, > - .init.init_platform = vmware_platform_setup, > - .init.x2apic_available = vmware_legacy_x2apic_available, > + .name = "VMware", > + .detect = vmware_platform, > + .type = X86_HYPER_VMWARE, > + .init.init_platform = vmware_platform_setup, > + .init.x2apic_available = vmware_legacy_x2apic_available, > +#ifdef CONFIG_AMD_MEM_ENCRYPT > + .runtime.sev_es_hcall_prepare = vmware_sev_es_hcall_prepare, > + .runtime.sev_es_hcall_finish = vmware_sev_es_hcall_finish, > +#endif > };