From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755859AbdJPTvW (ORCPT ); Mon, 16 Oct 2017 15:51:22 -0400 Received: from mail-sn1nam01on0082.outbound.protection.outlook.com ([104.47.32.82]:11520 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755645AbdJPTvU (ORCPT ); Mon, 16 Oct 2017 15:51:20 -0400 Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=brijesh.singh@amd.com; From: Brijesh Singh To: x86@kernel.org Cc: bp@alien8.de, Tom Lendacky , Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , Borislav Petkov , Andy Lutomirski , linux-kernel@vger.kernel.org, Brijesh Singh Subject: [Part1 PATCH v6.1 02/17] x86/mm: Add Secure Encrypted Virtualization (SEV) support Date: Mon, 16 Oct 2017 14:51:04 -0500 Message-Id: <20171016195104.122564-1-brijesh.singh@amd.com> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20171016153423.2980-3-brijesh.singh@amd.com> References: <20171016153423.2980-3-brijesh.singh@amd.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [165.204.78.1] X-ClientProxiedBy: DM5PR06CA0068.namprd06.prod.outlook.com (10.168.110.158) To SN1PR12MB0158.namprd12.prod.outlook.com (10.162.3.145) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: aa91e17b-c25c-495c-154d-08d514cf4446 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(2017030254152)(48565401081)(2017052603199)(201703131423075)(201703031133081)(201702281549075);SRVR:SN1PR12MB0158; X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;3:MHnuF80WS9dPZgbQquTBdPilZI6dQZ6q3In1QQ/RADSDiH+EXyIESQlNltgJm0RBPans9z7DCxnopo2KkwgpV49SqzXBmSeBAnW0QjDTmxebWILE8seKxlbhA7ivvz/LBsZxu2827dCcP0VFD4CNhLw2J8/+f7bhMx1iui2MDDksMFORXYM6Dl8KkMgu7MyLsWSuHiyFqd5vzzO1ZeVm+SsAjFCRRiYb0IDdi5Sve4v+cYiOL1zkBCoxNfFyke8e;25:6cjIM4c50Q7t3xIo3rf0W7LluD5PXdvdHiAkPEliaQFGN5+wkC2alp7KcP35QVwhDoM3NUgaGm6blT4M/dz1UsAWiglf3uZmm5i56gHcsPg1hzAw2b9l49OB3tNo+QWb1TxCRQgyO2S4pHiv2h5E9EPzxtEd7LSnSYBvddQ5/rFq3GzN5uWYFy583KRilfFF3QesyiggcijM4JysruWbcwBWLamPwU1e3RpraKH4E1TgMOV9TJmjWzc4dnDBMLYm9FKd5160naes4KvFVUm6zKKe5gB8lx4DDyAAHro/2cebWF93FJuzcBiz4bEVinDoMyn3xsfGxj4jQMR2XdqDCg==;31:oOIkuACQOYZSGWHF6Y2BZ1uFCNBjVFPP15hXVf7SYC8SHf2dgYFY6xCKStKzHWP8BVm6cAjRK9L1ioPCRvKogxAviELqwHshNEdUk+kH8desfQoRJu8MExjCP0qum3hRvwhTsofETfQCsLUx9KSNiVMehz17HF8w/0Q4hjr+UwqPhNYVi3j98RNo6IiZ5AKLlGtzhmoElT/Wn7MObRY9a201pC+W6gX5ZXgYgprT+0c= X-MS-TrafficTypeDiagnostic: SN1PR12MB0158: X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;20:MuNVSMvojQUcQmQ50kB3A2YoHoqaPrr7Cc5IQ7HBgWkeSbgzIZtoK1bRte5IPE5KbvXFSqmQVfE2Zj5GHOAP9Ils1lrFlMGB34zLv4kAkTHSBcWnrqJ+kqz4xceKVmbJ1K0mjnYnceU04AdQf6W27IogoEpfwHFoOGyLvEWzQ3oHqWJ+6aqnkkzUW7NSXKXSsfOmTVEbqjKUGU4d0ZK5DOeWm0QxH8Du/b3rjUqD6Ppz2favfa+F2BefDwEo+yPdUrW91a93Xp7iuTMZKvUuZi8oZ4/58c/s/QeQCekbIjatMXL5bUo1J41xLlBJmTMa7aDHUBw702d+/oT7rQOD7xcFUdctLRO3sRnwTvJWVp/0Ddnr5L787+FeglJiFESMoxDEI5lfJFICP8rvLYAkKivNoWHrgPZMjhLzMpRCyW+2ZR9nTEHexZyd9ocSCKeml/uaWSjvTI4qq+0nldmLa1Dws6Cw3kO/5Y71giWLfcEaSSVuyU4aB8PRFeNw2AkQ;4:myweNP0f8VIFPfO46bBudrfFCnBGsDs3STVS3n42PQdR4/vp27ncQJ7eBGxjG81xwJHh5yfGXe5aLnvlJP9FUya6dSTNl9sN5LBMZIe87pnP7NZk9/jI9cFDoF2aOw40ZyEbesRC7qBzGYWKxcwMxACuVD8f6MtB8IQA1EAjMGq/9KR7zdnB5N0Z47nHStnR2ysBHnL+i8lLjs6OFi02td0ZayEBZapX55OKqoWbAqrzp+F8MvcR/9Zc1gVsd0zQY21yVrce/wOUKke3SGDCKJsdgi4TBl3ymgXEd9UEh9YRBQr+4ECnGQsqlCH3oRPbzaPfqxXiBbkvyvDTrg03SQ== X-Exchange-Antispam-Report-Test: UriScan:(9452136761055)(767451399110); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(93006095)(93001095)(100000703101)(100105400095)(3002001)(10201501046)(6055026)(6041248)(20161123564025)(20161123558100)(20161123562025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123560025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:SN1PR12MB0158;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:SN1PR12MB0158; X-Forefront-PRVS: 0462918D61 X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(6009001)(376002)(39860400002)(346002)(189002)(199003)(50226002)(8936002)(81166006)(81156014)(8676002)(101416001)(97736004)(106356001)(76176999)(3846002)(6486002)(36756003)(6116002)(53416004)(105586002)(5003940100001)(2361001)(478600001)(50466002)(48376002)(25786009)(50986999)(2351001)(4326008)(2906002)(16526018)(1076002)(54906003)(68736007)(16586007)(5660300001)(316002)(53936002)(33646002)(86362001)(66066001)(189998001)(6916009)(2950100002)(305945005)(47776003)(6666003)(7736002)(309714004);DIR:OUT;SFP:1101;SCL:1;SRVR:SN1PR12MB0158;H:ubuntu-010236106000.amd.com;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;SN1PR12MB0158;23:45iyMiLR7x9Fq6lK8OL1pFM2WN+mIadPhTBCD1rjr?= =?us-ascii?Q?5J9Sru9BmPvje2AcUr54cjZJtYhnGeCIp+9jGGMQ7FM7V6j9lbQoNtn/BZQ3?= =?us-ascii?Q?QehcPAh9LWo94duv6Qtv0HdZCO1jA4/kkPiIat9XOZ3gWKPO7bTO30BIBzar?= =?us-ascii?Q?aGJ66TBjZIiKssuynYzs59ntCXI9+JftA5WIHy2JDOIuWqlHO3j/cEF/7czW?= =?us-ascii?Q?Sx3ldORKrzSabzDNwj2sl8mR+sftUcvYyR1CLYeppSoEf11GPRk+eg3+Vdd3?= =?us-ascii?Q?h/JpBJiKYiqQggRBs/oZXK4X7VOHfTSbo3F327UCXv/h+HdBiGWv0LDSESk5?= =?us-ascii?Q?dXjnoBFdspnzfz2i0/ekDMAeULFglEUzO2aNnfZtHYA70erFr2at/iFylroY?= =?us-ascii?Q?0A/ahTEim0oF8L/l9mVOge/fNzxfwNAJOtCsq42hMxPdY9Fv9LipPpw3kUPa?= =?us-ascii?Q?tmGfHdHYp1Xj9WojU+B6LXlZs58BmScHJ/yV8vNHLr7xnhrkwQFVQEV8lxNo?= =?us-ascii?Q?gi5ynaHDb2ovhT1nNiLdjIyJl2d7Q7Lm9sxLg+efSZg7r3hxeyTetID/c7DF?= =?us-ascii?Q?Lz6p+NEYU0JirVxF5g0tHAAVCZTDljPhXnzLB1FSJWFcEImq8GFJXaxbVd+P?= =?us-ascii?Q?/6zuLsPB1SHkGK/s3ZARrcgY592fOyeXzyB1Wz9yETk2rFqyPrr/KwfTunlC?= =?us-ascii?Q?qQzraJm2L+HWN+FbjwXuOO6qiFBNSPJyMTkKLrRSiN4yX5oIE/O5eGiVi1B5?= =?us-ascii?Q?GYOvQ1eLn+qFTRtne0Z/HZknyfQgcnzfxaJboh0KVfuY0PcrBai4Kqz2e2So?= =?us-ascii?Q?XocbF/GGBQ3y6QuCMc/HUXGbFPPbm4lLLIxWUbSrEksPJMW1fh6hHNVzhzi7?= =?us-ascii?Q?qNxcFUpJlka5XEn06Ako3DledaL4t58O8qBnLkDkbZ1SlGFMrKorq0Ur6kPz?= =?us-ascii?Q?UXdZjVVgTLaTdIBB9EwH3yrlS17i/r4xP2M2qWokEN3C0JgtRjMSFT4TsqHD?= =?us-ascii?Q?LlwaUfg4aJt04YTm546FPBaWZpOXMdJ1gYYyps74joDvrKLoCa6Cvh361oZr?= =?us-ascii?Q?bc2T0fGGje9kTjeibkpVW4IHo8ddnbYJiVKi1cxfnudbF36N6xj1HC4Gc6Us?= =?us-ascii?Q?mzDl7xJUzN4PQYNzERaMu0lyo+M55tZjX2/cAsjeK/TZlsy+MTiSszF76IbH?= =?us-ascii?Q?GiRK4udsr/jbcU=3D?= X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;6:3rvhaUogyohg9gWrg6pzH6JVRWm8h/p2KGYlDIHo6PcQYkrBotnO29nUQl1VhS8D/X1RmsDesTLsDR6b0po/E/23wnCYiVlDbw+gErXkVW40EsFMqua9jq/Gby2KvhioCEZYehV7ArOwkd2ZLcns/Xupilpny1/CcjWb2vVzw/tJCAHWoRg0nXGGQVfsnGTt1RrF4lGAVww3yL5tXzVw1wi1Z+nAnuzXNEZWByDwmqGQlT7luBlacw/iAiCdA3adqWzC97tO+tgYpTL8N0NGfpLautHhJ0Te8pIKIr5HELGyQdxnJDuP5HqjV6WHtCzuRG/AtnHDb4wPPzUHK9CROg==;5:fsgnYwrDQDI1gwS8yraoDNJFivkH8S2lys1RnOQ5G+B+aHQtt+/NocjaAhqgl1dIUdh/lXHUTvvww7575wtNuXSYDxNdbLFVUkCZSbSPCQAEE6QPj4xUHnBLfDl1CeXW2q9LhmMrR1EgSNIVvTfhHA==;24:DQ9U2TQFCZEsPVggHkBFscCnpP54XLeXSWmmKmrIeWkJ9KL3Qs0yV1dELCJj1c+gWYL2fEIqBO4OPKu+H2x7C5T4nSr9WuP2nJR3E4XDpO0=;7:lw8v6UHvfRmtpJnuneXLh2sOkK9JzgMy/OwehkSWWsqajMf8TGX9IV30v6t5433ZM9hxgDPTlGsFHuqSHfkZUNWkh/Li+RarJf0d0EeMLVgjx/0YlJN9S+m7FQRZeYrVNrRbVBEoXAbT6qbxp7wrycdeFdbHGyMeMQQrMHyiJgE1Q6JIoqbLx0hM3hl0qmQdCXqWw5t7IZeClwQEo2Bzq+eqS3JNWm359iiD5nDbJpY= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;SN1PR12MB0158;20:93yK5Y/1YVnvNgOYkqI2EzjQIFLE0rt140g5RPYF9woz5G3dhesQCwr32lEzmO9p+EX+47r7YY/j67kcm1qpgNG+fhBm6bTyI1Y04MtSXOnI2U2L66JsQj+u3RzDEcBOvMpyEvp5YBm1LgLAd2RK1+F2ApvDIfi5G+goHQP5N2z+6OPvSU/LjcHO7LL1tbMlAFtPH0VTqZqBcbCiPLw4FC42bhTdAWt0vqL5h21rwwa4vBP23g9t7vFBg7Fxvbdu X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Oct 2017 19:51:17.3241 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN1PR12MB0158 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tom Lendacky Provide support for Secure Encrypted Virtualization (SEV). This initial support defines a flag that is used by the kernel to determine if it is running with SEV active. Cc: Thomas Gleixner Cc: Ingo Molnar Cc: "H. Peter Anvin" Cc: Borislav Petkov Cc: Andy Lutomirski Cc: linux-kernel@vger.kernel.org Cc: x86@kernel.org Signed-off-by: Tom Lendacky Signed-off-by: Brijesh Singh Reviewed-by: Borislav Petkov --- Changes since v6: * do not initialise static sev_enabled to false arch/x86/include/asm/mem_encrypt.h | 6 ++++++ arch/x86/mm/mem_encrypt.c | 26 ++++++++++++++++++++++++++ include/linux/mem_encrypt.h | 7 +++++-- 3 files changed, 37 insertions(+), 2 deletions(-) diff --git a/arch/x86/include/asm/mem_encrypt.h b/arch/x86/include/asm/mem_encrypt.h index 6a77c63540f7..2b024741bce9 100644 --- a/arch/x86/include/asm/mem_encrypt.h +++ b/arch/x86/include/asm/mem_encrypt.h @@ -47,6 +47,9 @@ void __init mem_encrypt_init(void); void swiotlb_set_mem_attributes(void *vaddr, unsigned long size); +bool sme_active(void); +bool sev_active(void); + #else /* !CONFIG_AMD_MEM_ENCRYPT */ #define sme_me_mask 0ULL @@ -64,6 +67,9 @@ static inline void __init sme_early_init(void) { } static inline void __init sme_encrypt_kernel(void) { } static inline void __init sme_enable(struct boot_params *bp) { } +static inline bool sme_active(void) { return false; } +static inline bool sev_active(void) { return false; } + #endif /* CONFIG_AMD_MEM_ENCRYPT */ /* diff --git a/arch/x86/mm/mem_encrypt.c b/arch/x86/mm/mem_encrypt.c index 16c5f37933a2..add836d3d174 100644 --- a/arch/x86/mm/mem_encrypt.c +++ b/arch/x86/mm/mem_encrypt.c @@ -42,6 +42,8 @@ static char sme_cmdline_off[] __initdata = "off"; u64 sme_me_mask __section(.data) = 0; EXPORT_SYMBOL_GPL(sme_me_mask); +static bool sev_enabled __section(.data); + /* Buffer used for early in-place encryption by BSP, no locking needed */ static char sme_early_buffer[PAGE_SIZE] __aligned(PAGE_SIZE); @@ -192,6 +194,30 @@ void __init sme_early_init(void) protection_map[i] = pgprot_encrypted(protection_map[i]); } +/* + * SME and SEV are very similar but they are not the same, so there are + * times that the kernel will need to distinguish between SME and SEV. The + * sme_active() and sev_active() functions are used for this. When a + * distinction isn't needed, the mem_encrypt_active() function can be used. + * + * The trampoline code is a good example for this requirement. Before + * paging is activated, SME will access all memory as decrypted, but SEV + * will access all memory as encrypted. So, when APs are being brought + * up under SME the trampoline area cannot be encrypted, whereas under SEV + * the trampoline area must be encrypted. + */ +bool sme_active(void) +{ + return sme_me_mask && !sev_enabled; +} +EXPORT_SYMBOL_GPL(sme_active); + +bool sev_active(void) +{ + return sme_me_mask && sev_enabled; +} +EXPORT_SYMBOL_GPL(sev_active); + /* Architecture __weak replacement functions */ void __init mem_encrypt_init(void) { diff --git a/include/linux/mem_encrypt.h b/include/linux/mem_encrypt.h index 265a9cd21cb4..b310a9c18113 100644 --- a/include/linux/mem_encrypt.h +++ b/include/linux/mem_encrypt.h @@ -23,11 +23,14 @@ #define sme_me_mask 0ULL +static inline bool sme_active(void) { return false; } +static inline bool sev_active(void) { return false; } + #endif /* CONFIG_ARCH_HAS_MEM_ENCRYPT */ -static inline bool sme_active(void) +static inline bool mem_encrypt_active(void) { - return !!sme_me_mask; + return sme_me_mask; } static inline u64 sme_get_me_mask(void) -- 2.9.5