Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp1188112pxb; Thu, 16 Sep 2021 01:34:41 -0700 (PDT) X-Google-Smtp-Source: ABdhPJykYwxrAvDhITou2N4hiealZSwdJPj9N5JyqhkzC0/T7HGpR4f++j46j/CWGejhS7/jg3Zw X-Received: by 2002:a5e:d513:: with SMTP id e19mr3329353iom.82.1631781281301; Thu, 16 Sep 2021 01:34:41 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631781281; cv=none; d=google.com; s=arc-20160816; b=isO147mhuhw5k5zGGRxwwirtzoPp7NjEBNTryXOIyIFlpNcaDHWzD95NBGluABaZb2 xCw9sYJOrgoqpBdUDiXCOKsV1Jvhy73d5MoUCFlNLP5p43SiqLaUNyA4t2oMex8TG5ri hKsPfa0GTtguE6VWXQLbEThFbhLtaeX/Z7B0GOzwsgURw+sO5SO7epfnlgqTuaeI7b+V KXqjMijTWECtwM9FpalR+PVpc8ZLPkPPD+5lzIIFLoi0T5B3IoeEOSlSjvtGvqmcYSNY 6VlCGxk+J31FgWDf7YbUks+czSOUFBVYrPN9Sica3S8SRPBPvMOO6M1ITgsk1ijd6FlF 5OaQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=jxlL0lGtv5ZlNrPQbf90760XLEjt/UFew72/NT7P6ZA=; b=r/9DRTroPmx35C+o6ddDStU3kcJ3AW1eglhucKZ2R7uib3i3p2ZI6MMXTa/xP1qnOQ 9TckIkmdD+dVBkQLX2tdCcp6PwBuIJ5gE5hNXXH//qsUW09xg4JuPjWQVOgGOueEMPsl Qh9UqC16k3jn+ggnck2uelUJX8MJ0685DXjh4qkkS6I7ZgZzArZfVdqFJnYFQgt2ZhxH 14uResa2xmMF/iPCRdlLkUclgn3CfCNyb5iRUWEpGsdNMTqrYrPhb8JBSyUPZF2mPsl+ hOC4uAXPkghfFfe9uGoXG8HVp2c0WY5g79kkUHFGwbNp9gpjh+mK3dp/YZwXDXuVIvih gmgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@dme-org.20150623.gappssmtp.com header.s=20150623 header.b=TkTWRVF+; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m24si2171631jac.82.2021.09.16.01.34.29; Thu, 16 Sep 2021 01:34:41 -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=@dme-org.20150623.gappssmtp.com header.s=20150623 header.b=TkTWRVF+; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235270AbhIPIeO (ORCPT + 99 others); Thu, 16 Sep 2021 04:34:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49548 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235114AbhIPIeF (ORCPT ); Thu, 16 Sep 2021 04:34:05 -0400 Received: from mail-wr1-x436.google.com (mail-wr1-x436.google.com [IPv6:2a00:1450:4864:20::436]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DD9C5C061766 for ; Thu, 16 Sep 2021 01:32:44 -0700 (PDT) Received: by mail-wr1-x436.google.com with SMTP id t8so8143540wrq.4 for ; Thu, 16 Sep 2021 01:32:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dme-org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jxlL0lGtv5ZlNrPQbf90760XLEjt/UFew72/NT7P6ZA=; b=TkTWRVF+5Q7Su3IUaesuhgf4CtLDdMSqoQgis6/0kVEgCS2xqDGymVIOELO3gYGYTB e2SxJlu5+fKJqBBEjqHq2o1+9vd+KD8skQfo5Rpb/nlUSzaPqRW8Lei0/HUwgFkSdIAG oEdHGSp1kHWO3MrUUi4vBU+/qkp49b26WEEMww/cNRsoBZ22a929EP/U3gQkvEAyAMqE CB0T6twNdt6LcikTrYASFmN4ztePGAtLJH0SgTbcRyh1EM3v7UecYNhsS/gBe7nt+Ivc ITPu5MHfPqsM96Bt2I2GKNLDo3Nuwq1zv+C3BIJP2RT3pVfAjH3BQUfsAvcLwi0W4Qad faGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jxlL0lGtv5ZlNrPQbf90760XLEjt/UFew72/NT7P6ZA=; b=p8zoHPToA3nIj0Oa+s6dw+r87e8hYUI/hS9ZQv/9JOSYPLKEYF9VP2I3cx0D1k8zxW V60T2CmtsmEVp8fi3dYPEy7QD3ACOPSWtbx+b/Acb1lI0/LzN9ygSV5I56h0oAomeEu9 vTBxcJnmDnmDwpj0TlWAb2gseJZphtr4k+UnkAchNvH8OQW+kK8rWFTyyRUcg/+5gKXE 4RrstSxMOofSYyDSVqRB9ic+nsRJFXGk1483vcYI6vP6hrfo3RIyK35pJ6ss7dRQO3eY QkfMgOvYDbeVJt2NL07TrTCBGGGFtDOgWJLTOJT8QYt9zuBA0qdz+DVaGjZdtxfOxyvP WXhQ== X-Gm-Message-State: AOAM531ys2VfOCDQFvFWzF7SYMErPxyR1bDPDtlzRYQh24Y05ocf9gAa PnlVpbUO6PzmMWAgiaXnbinq2Q== X-Received: by 2002:adf:e384:: with SMTP id e4mr4705046wrm.64.1631781163393; Thu, 16 Sep 2021 01:32:43 -0700 (PDT) Received: from disaster-area.hh.sledj.net ([2001:8b0:bb71:7140:64::1]) by smtp.gmail.com with ESMTPSA id c135sm6760024wme.6.2021.09.16.01.32.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Sep 2021 01:32:43 -0700 (PDT) From: David Edmondson X-Google-Original-From: David Edmondson Received: from localhost (disaster-area.hh.sledj.net [local]) by disaster-area.hh.sledj.net (OpenSMTPD) with ESMTPA id 6aff296b; Thu, 16 Sep 2021 08:32:39 +0000 (UTC) To: linux-kernel@vger.kernel.org Cc: Wanpeng Li , Joerg Roedel , kvm@vger.kernel.org, Paolo Bonzini , Vitaly Kuznetsov , Sean Christopherson , David Matlack , Borislav Petkov , Ingo Molnar , x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Jim Mattson , David Edmondson Subject: [PATCH v5 4/4] KVM: x86: SGX must obey the KVM_INTERNAL_ERROR_EMULATION protocol Date: Thu, 16 Sep 2021 09:32:39 +0100 Message-Id: <20210916083239.2168281-5-david.edmondson@oracle.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210916083239.2168281-1-david.edmondson@oracle.com> References: <20210916083239.2168281-1-david.edmondson@oracle.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When passing the failing address and size out to user space, SGX must ensure not to trample on the earlier fields of the emulation_failure sub-union of struct kvm_run. Signed-off-by: David Edmondson Reviewed-by: Sean Christopherson --- arch/x86/kvm/vmx/sgx.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/arch/x86/kvm/vmx/sgx.c b/arch/x86/kvm/vmx/sgx.c index 6693ebdc0770..35e7ec91ae86 100644 --- a/arch/x86/kvm/vmx/sgx.c +++ b/arch/x86/kvm/vmx/sgx.c @@ -53,11 +53,9 @@ static int sgx_get_encls_gva(struct kvm_vcpu *vcpu, unsigned long offset, static void sgx_handle_emulation_failure(struct kvm_vcpu *vcpu, u64 addr, unsigned int size) { - vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR; - vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_EMULATION; - vcpu->run->internal.ndata = 2; - vcpu->run->internal.data[0] = addr; - vcpu->run->internal.data[1] = size; + uint64_t data[2] = { addr, size }; + + __kvm_prepare_emulation_failure_exit(vcpu, data, ARRAY_SIZE(data)); } static int sgx_read_hva(struct kvm_vcpu *vcpu, unsigned long hva, void *data, @@ -112,9 +110,7 @@ static int sgx_inject_fault(struct kvm_vcpu *vcpu, gva_t gva, int trapnr) * but the error code isn't (yet) plumbed through the ENCLS helpers. */ if (trapnr == PF_VECTOR && !boot_cpu_has(X86_FEATURE_SGX2)) { - vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR; - vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_EMULATION; - vcpu->run->internal.ndata = 0; + kvm_prepare_emulation_failure_exit(vcpu); return 0; } @@ -155,9 +151,7 @@ static int __handle_encls_ecreate(struct kvm_vcpu *vcpu, sgx_12_0 = kvm_find_cpuid_entry(vcpu, 0x12, 0); sgx_12_1 = kvm_find_cpuid_entry(vcpu, 0x12, 1); if (!sgx_12_0 || !sgx_12_1) { - vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR; - vcpu->run->internal.suberror = KVM_INTERNAL_ERROR_EMULATION; - vcpu->run->internal.ndata = 0; + kvm_prepare_emulation_failure_exit(vcpu); return 0; } -- 2.33.0