Received: by 2002:a05:6a10:9e8c:0:0:0:0 with SMTP id y12csp692998pxx; Wed, 28 Oct 2020 14:41:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwd9C9HtW0k3JHE21zSWQ34iDHwdFtx3Oz3jZ74s9DLPu0TSUF65GvFCjcjL7LiVsDBT/O5 X-Received: by 2002:a17:906:7d0:: with SMTP id m16mr1032379ejc.445.1603921291372; Wed, 28 Oct 2020 14:41:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1603921291; cv=none; d=google.com; s=arc-20160816; b=n+UUgo/nuyk1zcVLD8q8PustnoPvit5n4WIc1kwO2P+vTX/8VPSNH4nx5N95+wA7JX KSik3eq4iPflPdWMuijYWFUpEi7U1AkDvxT7PwtaJnD4CNhAXWw001nz7wF6VXb1D3hA JEJI52muzmWA7Fo99G+gMFKdxZ9HpPK4iJUKVi7Qd1JCnqhRc0Aj/LVQTeuVdYLlABTp +l0kqfC1mGoiQbFCzMz7iCW64L3SvZk6YGS+RJ+8A1lwoAmcPNlRlIyhSQOhyjIvs7Jc bA98dYovYcB5Ri0DlDWBShvMuEbUmW6go/xiVIVYwkpmadsouUALvmX2p5gvg7ofeaqA E9Nw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=ZxA/FTzW2i1d24RS8IAJvgkUnZ1daeCJad8ZQtHPyjw=; b=x84RHqPFwhiw1izC4v7ocYkP5xqM8qsiEQKIdZtsdNsDYe7jcIgU4ZpJheOcmYS/H8 A33wWknI3EvizvqUDxaP4hXxmJcV94g8X1pVxpJOACHJ+2FKCIGDRf/xemhqGrSAdYI9 dZ6IoHaWvTptJ9BnL+eGkNlBcL/rRfJiXZDAABwDbePQ8GPlEc7R4ovNhDsZUO7ourU6 tnx8jFdCeDe/CbCHfEgAMrPp/mx4TmO/Oidf5sNZNrk1ZSEMC3Q8y+hS7A7twGFscRGD YPCvvb72xGtqOCTE4D8+k5SbFSnnUL8pu4NazUGnORdYCdESzwWStufaqeMK9ZqeSy1P zWOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=ZV3b04sK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id lz26si379089ejb.329.2020.10.28.14.41.07; Wed, 28 Oct 2020 14:41:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=ZV3b04sK; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726060AbgJ1Bia (ORCPT + 99 others); Tue, 27 Oct 2020 21:38:30 -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-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 > };