Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp718326img; Wed, 20 Mar 2019 09:23:52 -0700 (PDT) X-Google-Smtp-Source: APXvYqwK8buBbgnoK5SDZxaFSACMS0fF0ueC/6a+3Z0lQcxSak8J06Ga3bZnKaz54s0jpd4Rdw4s X-Received: by 2002:a17:902:a81:: with SMTP id 1mr8862825plp.308.1553099032101; Wed, 20 Mar 2019 09:23:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553099032; cv=none; d=google.com; s=arc-20160816; b=fSTVQH4SeiIaHGp+OtSU5bRKus3FvYdA7fz2Try0tfGZT6y0zFiZrgeGFDoCZ5VTEx boTTMk7D6btZfUh1ACOFyNBpexEcOguAnfIZMiO3Bb36SvF8u/gJEd4ckop/rpKWfHGr uSXRh8weDxL8XleZSNoTui3XPzLdwXgewiCwhSmL85ocQYQ60FMB1Xs4UyR5Voq1viAG YuhYn2ny13GIDGox//qXcSo0aenMNah5UpGnFXtLAf4pmmHWizXTN8a1pls5KjO4MrS7 4eQL07qUiSgO6cRIBl4rXfim24M2DlXBt4UJRcqXnxmGwWhdQbDEM4N0HjrYBm5tx95J 0fAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=cx62d8WEhxANGzMF+eRZU3ddSD0bRNTbRFgZsMLWdEg=; b=yJZXYtJOh7A0QpRdbwKxHFun1Uhp1PBiVsd7zSHz6tZfvF1wudTvig7X8v6S6YEE5A 1y8gSynJW0wxpayQ4E66tD8nA5hWlwt+Bhy6MKdA/Y5kBCDgE+L166URWAEV55XYoq3X vCMyW1Si4aQ9o9jxoJse4Fk7ecyU/S70cqSQUIeCh/EEu29DnIAgs2oMOwp2DaPbdPTR dZolFmmyKGhX0vzo3AvgoSvKASC0FLMFTcC14+tCGD0jZlw9RAr+tuzrmZbunxFqf+aq LZ2o6tFtohyaw40vUR3Z2rwjDHpPbtiKj7hyC6BmJXnyxmZV+CpFRfgOIIql21XOP9Cn i2fw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h8si2334096plb.10.2019.03.20.09.23.36; Wed, 20 Mar 2019 09:23:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727601AbfCTQWY (ORCPT + 99 others); Wed, 20 Mar 2019 12:22:24 -0400 Received: from mga11.intel.com ([192.55.52.93]:53000 "EHLO mga11.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726366AbfCTQWY (ORCPT ); Wed, 20 Mar 2019 12:22:24 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga102.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 20 Mar 2019 09:22:24 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,249,1549958400"; d="scan'208";a="135714720" Received: from sorenthe-mobl1.ger.corp.intel.com (HELO localhost) ([10.249.254.203]) by orsmga003.jf.intel.com with ESMTP; 20 Mar 2019 09:22:14 -0700 From: Jarkko Sakkinen To: linux-kernel@vger.kernel.org, x86@kernel.org, linux-sgx@vger.kernel.org Cc: akpm@linux-foundation.org, dave.hansen@intel.com, sean.j.christopherson@intel.com, nhorman@redhat.com, npmccallum@redhat.com, serge.ayoun@intel.com, shay.katz-zamir@intel.com, haitao.huang@intel.com, andriy.shevchenko@linux.intel.com, tglx@linutronix.de, kai.svahn@intel.com, bp@alien8.de, josh@joshtriplett.org, luto@kernel.org, kai.huang@intel.com, rientjes@google.com, Haim Cohen , Jarkko Sakkinen Subject: [PATCH v19,RESEND 05/27] x86/msr: Add SGX Launch Control MSR definitions Date: Wed, 20 Mar 2019 18:20:57 +0200 Message-Id: <20190320162119.4469-6-jarkko.sakkinen@linux.intel.com> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190320162119.4469-1-jarkko.sakkinen@linux.intel.com> References: <20190320162119.4469-1-jarkko.sakkinen@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Sean Christopherson Add a new IA32_FEATURE_CONTROL bit, SGX_LE_WR. When set, SGX_LE_WR allows software to write the SGXLEPUBKEYHASH MSRs (see below). The The existence of the bit is enumerated by CPUID as X86_FEATURE_SGX_LC. Like all other flags in IA32_FEATURE_CONTROL, the MSR must be locked for SGX_LE_WR to take effect. Add four MSRs, SGXLEPUBKEYHASH{0,1,2,3}, or in human readable form, the SGX Launch Enclave Public Key Hash MSRs. These MSRs correspond to the key that is used by the CPU to determine whether or not to allow software to enter an enclave. When ENCLS[EINIT] is executed, which is a prerequisite to entering the enclave, the CPU compares the key (technically its hash) used to sign the enclave with the key hash stored in the MSRs, and will reject EINIT if the keys do not match. Enclaves can also be blessed by proxy, in which case a Launch Enclave generates and signs an EINIT TOKEN. If a valid token is provided, ENCLS[EINIT] compares the signer of the token against the MSRs instead of the signer of the enclave. The SGXLEPUBKEYHASH MSRs only exist on CPUs that support SGX Launch Control, enumerated by X86_FEATURE_SGX_LC. CPUs without Launch Control use a hardcoded key for the ENCLS[EINIT] checks. An internal hardcoded key is also used as the reset value for the hash MSRs when they exist. As a final note, the SGX_LEPUBKEYHASH MSRs can also be written by pre-boot firmware prior to activating SGX (SGX activation is done by setting bit 0 in MSR 0x7A). Thus, firmware can lock the MSRs to a non-Intel value by writing the MSRs and locking IA32_FEATURE_CONTROL without setting SGX_LE_WR. Signed-off-by: Sean Christopherson Co-developed-by: Haim Cohen Signed-off-by: Haim Cohen Signed-off-by: Jarkko Sakkinen --- arch/x86/include/asm/msr-index.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/arch/x86/include/asm/msr-index.h b/arch/x86/include/asm/msr-index.h index 6efaa8026c64..a4a22441d000 100644 --- a/arch/x86/include/asm/msr-index.h +++ b/arch/x86/include/asm/msr-index.h @@ -525,6 +525,7 @@ #define FEATURE_CONTROL_LOCKED (1<<0) #define FEATURE_CONTROL_VMXON_ENABLED_INSIDE_SMX (1<<1) #define FEATURE_CONTROL_VMXON_ENABLED_OUTSIDE_SMX (1<<2) +#define FEATURE_CONTROL_SGX_LE_WR (1<<17) #define FEATURE_CONTROL_SGX_ENABLE (1<<18) #define FEATURE_CONTROL_LMCE (1<<20) @@ -538,6 +539,12 @@ #define MSR_IA32_UCODE_WRITE 0x00000079 #define MSR_IA32_UCODE_REV 0x0000008b +/* Intel SGX Launch Enclave Public Key Hash MSRs */ +#define MSR_IA32_SGXLEPUBKEYHASH0 0x0000008C +#define MSR_IA32_SGXLEPUBKEYHASH1 0x0000008D +#define MSR_IA32_SGXLEPUBKEYHASH2 0x0000008E +#define MSR_IA32_SGXLEPUBKEYHASH3 0x0000008F + #define MSR_IA32_SMM_MONITOR_CTL 0x0000009b #define MSR_IA32_SMBASE 0x0000009e -- 2.19.1