From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752585AbdFGTRM (ORCPT ); Wed, 7 Jun 2017 15:17:12 -0400 Received: from mail-sn1nam02on0088.outbound.protection.outlook.com ([104.47.36.88]:57984 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752343AbdFGTRE (ORCPT ); Wed, 7 Jun 2017 15:17:04 -0400 Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=amd.com; From: Tom Lendacky Subject: [PATCH v6 21/34] x86/mm: Add support to access persistent memory in the clear To: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, iommu@lists.linux-foundation.org Cc: Rik van Riel , Radim =?utf-8?b?S3LEjW3DocWZ?= , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , "Michael S. Tsirkin" , Joerg Roedel , Konrad Rzeszutek Wilk , Paolo Bonzini , Larry Woodman , Brijesh Singh , Ingo Molnar , Borislav Petkov , Andy Lutomirski , "H. Peter Anvin" , Andrey Ryabinin , Alexander Potapenko , Dave Young , Thomas Gleixner , Dmitry Vyukov Date: Wed, 07 Jun 2017 14:16:51 -0500 Message-ID: <20170607191651.28645.70995.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170607191309.28645.15241.stgit@tlendack-t1.amdoffice.net> References: <20170607191309.28645.15241.stgit@tlendack-t1.amdoffice.net> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [165.204.77.1] X-ClientProxiedBy: DM5PR16CA0040.namprd16.prod.outlook.com (10.172.42.154) To CY4PR12MB1141.namprd12.prod.outlook.com (10.168.163.149) X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CY4PR12MB1141: X-MS-Office365-Filtering-Correlation-Id: 0b1f46c8-cd9a-4abb-ecc3-08d4add9c268 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(48565401081)(201703131423075)(201703031133081);SRVR:CY4PR12MB1141; X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;3:kUICFa5BvmTEcbPKEzsPfrnyKGo1QHdf17ojlFd4QJQfkmOH/aNgyZYIfQuAm6RXKr+PgiC6c0M2bE/dptIBIre00qaMgE5cJ8QiRFZc5M6cwz8EN1KZ695WrIDusxydCJW0X56i/R9oMiZfaflGacRvkWyjCjxG0wQQV5u+knURAdOr6VQA8u2LWSpfut1iDAl0psWa9fBeGVlGfZvsogPSjFEUImJgHpbya2MqVB6eIqKe7B4osTVCkEaMV3peZ0mODO2G5crSqTifuX51CoVSGpRMmR4QoZWlo5tRF1j59AVwFWOFaIuUvHoyC79RSwYo6/p/xEvhy+Q4FIsL89I84SEu6JEEZ/LC3QqD3Wo=;25:NZbSKVaFtCu37bsIUJJqvrwRQvdMWdQ9LiB9xZt6tt8qA6YybFAkNMNqOntmcqIk7M5LPOAGdBnofngcX/cg8K0uE07YEu0w8holYEdbvuWZPlue2inFKDHj2XUqssK47NRgqBYItuCeXJlHT+FKmNt/mUix1tq3qemL41GJgJJdveBT0toFj7amkbdxNZm5Pt5MV6ZlwUjE4DglqP/5Xb/YPLs9ypaJGnp/CN9ys6yWL6sdamoO63c9mU5kRe4NesHXBfsMCI/TSzAT0dJZMNS3+9pAX4HUWsjfDzNqJfb+udEIkllhGcH3PtHhWdZuUPXYRlV/toEO78ogpGeropBBF+1cYsRPtE2egJJWIQ78e5fxLbgsvridrqf+qxFjkDlT0ZfQoxGHf/6RoSXRIIR+I0QK6LS+jw0gFcp9j2MlKf3gne7jfS3WsYZxHoHayO9VfMDa9ote7L20CfRqDblubVSq1bcekPQXtZMgBgQ= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;31:NgJofml2z/itnFyFdft5Vfk2TpCvB935GidRMdJN9e3xPpt/CeG9bmN8p/5Pr1UZ7GljTUK5L+h+U7sNGCgMMfnGLK3QQIQWhPu0AMW/S3/mYAieI12iOHGppwN0pGk999zNRz8xfpIdQKLcgd/PtbH6gowMuZQtVvlx/ZKGypvuYbf2qsvGiBahpam+I5RMmEUcTkLvFSQT0l6kePGl/Svf9Nw84UJyEr4dp3EPcyA=;20:PorGqs2vZCqeuuBvjly6AF01VdjJ2shlEoO35s0JgNnJY6TCFT3qH77bzoF/fUcWg0HNGLbTZFW3ZkbTS9ZmLACZaFw1ADPiNkMd/Lsp7dONejCR7rxLdwE6VMhF17UHJyPzmlmcZ+niFRywhEah70ha10t8X5GgZfIgJ2kVtulnLTclTTe+W3w4Gh29wtqAXgTtqA+kRLlCpk+3AX6e53Jc/szhYCCIqkR95na+Rq6U795RGgilIQLIfU0si313tWkjNWyFWqfC4Gy/ysy6rRv0uDL0LAQaOw6Mu8DwVRkqzh4cyTddwgN9ZIrvDHYqrn5+dk+607Gzc6CxqI0pXUUuHxAzZ5uZkQFA1LnEhGFqwevH1yQuGSua2Gq7Hh9OTHGG6t0fsgKrwMJXh/Vsiay+jXdnKOz/6YNcBEP7/S8AWz+mQXl2uhcUg61100gj/KVprQEhlUo4cyDR2ulmqKRZA/SBiJdS2Rs7G/0D9SP6BOgr03htQpRIyOlmGSvp X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(767451399110); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(6055026)(6041248)(20161123555025)(20161123558100)(20161123564025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CY4PR12MB1141;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CY4PR12MB1141; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQxOzQ6bFlES0lIUEhqM0xBN2lFL01mS3cxallvTTk3?= =?utf-8?B?TWVVc1JlWDlsREpTaUM1N1ljcklaY3ZoaWFOTW9oYTBRSTd0aDhlOHcrcEVt?= =?utf-8?B?Njdha1VIaE9sbHFCaTFVUlQ0bXJSVy9lTDVOdXc2LzdGRHJ6b0YvNCs4V2du?= =?utf-8?B?OGd1emdGalpiUmIyK2doRlR1OGtpTVhUUGFva0F0VVFySXJpTldzUklxZ2l5?= =?utf-8?B?OWFkQ3BJZ0tkenEyeEdVWEUzUDZPZ2VRa3dSc1RZclFCQm1Zb2gyRTRTTWYw?= =?utf-8?B?TEdFcFBDcVlMck5keHR4TzducVpNR3h0VW9XcU1uSUdoTm9VSmpqWkY0RkJS?= =?utf-8?B?akQrbDA1dStPQzk3b1Fnb1F6VEtPZGtXdWxXS1dpN0xvWTA2Y2pmTE1vb2xh?= =?utf-8?B?MVVMVEd1WEE5TVNPVmJXeml1T1RKVzZ4azdCZjlVbElXTEVvbG5yQ1JObnpP?= =?utf-8?B?UjRINCsxZFg4dVIrTE1FU2ZNdVplYnNvSThkdTc5L1FoWk1HRDEyVG45ZVRk?= =?utf-8?B?R2o1T2RxM0FjR2RBRGxuSVRWMlA4QnNSeXhCWkhPVE9oY1RveXp4SDVNVFIv?= =?utf-8?B?SGVNZXg0SHJTSG16MDQ2TkdtTGVqT0tlRTg3S1BaQndWa3J1Y29jbmdSV2h2?= =?utf-8?B?b3Rwc3BYTnRLY29GemdwM3dhT3JTdG9odnMzeWxKYzYyVGtIeGFXVXpQQmdj?= =?utf-8?B?alNxQStBdE5OdVpSUUQ3b0RUR2ZCSkZBT25lV0xVM3p3S2N0ZXpGMHhtazlu?= =?utf-8?B?VmdVRVFxMlBVeHFKdmFlMDRCOTZJTDlQMUkweWRnNWorUkxDbGJ2bTh2MDF6?= =?utf-8?B?bWJrdjJSS2wvRnYyNTZNQ1k2L2ZndFFzNGNoNHZjU3FBM3lEWkVqUlFsUUNl?= =?utf-8?B?SVFhNjErWklORFV0LzJUaEROQktzS2p5NXFxbEZjS2VtS2dVUGhLb2Q3c3Z6?= =?utf-8?B?ODd6bzZhZ2hrT2wzSm1zck1mTkcvdXJ6dWt0MEZWVTN4eG91elM3QklDYXlo?= =?utf-8?B?bUVVam1XLzhWVGdmWUpzTGM5S05WUzhpbVdEZUVNaC8xU2NqT08zUEJEOUhT?= =?utf-8?B?cXM0QmMxZVBrR2RPT3p1S0o2R2krRDhkOUtGN0tRMWVsekNDdmVYcmxUU3VF?= =?utf-8?B?UU9Wd2Z0dnZyRkhiU3RVUFNMODVuQmlaRUhzeDVLWk9CQStVcVRtb1d0VWVE?= =?utf-8?B?aWRMcWxGSVNDVzJKOXpKYUhUdEZ4bVN6U0kxNWROQlNHSXpPc1l3VUJ1dnFK?= =?utf-8?B?MGFYdFcwa3VjS3l0UlgvdjJ1OXJ4cUVCb1hKZUFjQllpRzlqamF5RCtGQURW?= =?utf-8?B?QjBXQ2pnZkdRTUlBWktuVThLTi9LVlZQZ3dCcEJ5WTJXV3dVcWI3UFdEQldV?= =?utf-8?B?WTlnOUpmWEhNc1o5RWJ4dkFVc0VNbWJJSHlKd0crYlJwbXdWMkxsRzFpZGJK?= =?utf-8?B?R3ltb1NjTldrNzBkQWgxNVhkeWJuOE92Y1JGa1BvdklDK214QnlzZUpwajFL?= =?utf-8?B?b2hTWFltV3hGRC81dmlUZ2NoMGtEQjBVeFBDY1VtZFF1Y0tBMGUxZW9KL0Z6?= =?utf-8?B?ZjdOUmxRSVRoOGxaekNEZDZMMHl4RjJ3NEdrUWhJQjVmV1FMRlhuTElsU1pV?= =?utf-8?Q?OFw3dzlEqK07i3Oyt7p?= X-Forefront-PRVS: 03319F6FEF X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10009020)(4630300001)(6009001)(39450400003)(39840400002)(39860400002)(39410400002)(39850400002)(39400400002)(9686003)(54906002)(55016002)(6506006)(66066001)(4326008)(47776003)(110136004)(103116003)(25786009)(38730400002)(72206003)(478600001)(83506001)(305945005)(7736002)(86362001)(76176999)(50466002)(53936002)(54356999)(97746001)(7416002)(7406005)(23676002)(1076002)(6116002)(33646002)(3846002)(50986999)(230700001)(53416004)(42186005)(5660300001)(4001350100001)(8676002)(81166006)(2906002)(2950100002)(189998001)(921003)(1121003);DIR:OUT;SFP:1101;SCL:1;SRVR:CY4PR12MB1141;H:tlendack-t1.amdoffice.net;FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTRQUjEyTUIxMTQxOzIzOm5aQmpQQ2UyL1NkRUhXdnhsZTFlNmZidEl0?= =?utf-8?B?VnFZWW5tVmFiMDR0ZVpKZDh3bEhXQ3A1aXZ6K2YweVlOWXdVczBibW42UHRX?= =?utf-8?B?b3lITHN4WElRb3Y2L1lGWG9IQmt4NTJkVG5VYlExNE5GN0dGM3NEeUUrYzdL?= =?utf-8?B?ZFdFZGprUE5QdlkwaWppUThrV2lyVjFjMTIvcm5HL1VqTXJuaVhtOFZDTnJ5?= =?utf-8?B?VTZZY1hIV3pMRk11dGtNTnU2MXkrK0c4VmFkdGRLWFpDQVp5QVFsVnNZUHQv?= =?utf-8?B?ZzRrbFQ2a01ZdkxTSlJSSnU1N2xaUVZCZGtaSUp6UGl3czBpMlNDa09mVjgy?= =?utf-8?B?NzY3b29aendXazlWaXJyZzZncGE2elZINko5c2YvNXNLUUtWT3BkVExsNm9v?= =?utf-8?B?eGVsOWxXYjAwRUh5UDBPcHRzNHEvUWFydmJnK2NaUDhYcXpOK1VLdG5LNGJs?= =?utf-8?B?VmNYbndpbTlwVEUxTktKZVhQanlmNHBuQWRVSkdQbTVsWmQvbGxsMkJYUlh3?= =?utf-8?B?cFphVGJ0UEEwclZHM0xuSVNMUWpyVHhmbmRuM1A2azVlbWt5WnpoaEF5S3lx?= =?utf-8?B?TWlDTGdKNEVSamQybGltMmEwTkJmT290SlJZTHdCZTVkTnZWeGN2dU1kUnZT?= =?utf-8?B?ZE5GMktnL1R2MWtnZHhZYWVHTC9IdmhpR0FpMzNtcUZtWGx2eU1OeWlDS29I?= =?utf-8?B?Y3lKcEpFdjJRWVVqWWtJcGtFT204Z3orK0V1T3ZFM3c1TGFVSWxaalcwd2lL?= =?utf-8?B?V2dqTXFmcU1CYjhEQno1ZTU0MC9xUDNvekp0aXhQbmJDWnhoamNBTkFENEs2?= =?utf-8?B?cGRadVMwWVZkTVRjcUdiS2tTQ3F4bGt6NUlaU3l2cXoySFZKSHJhOHc5dHlF?= =?utf-8?B?TUJKSW1reHJRdVkzT1hKaHZYejdBWThja2lJTHZ5dWdpeENaRmQxc3h2MjdP?= =?utf-8?B?dTBKdjhIeVNhZUFRZ0pna2tEOGRQNHhwS3lJUzNBb1h6eFNSb0JFajJrcHk0?= =?utf-8?B?OXk1RG52bG1uNHFYRXYvczRIQ2I3aUxzdmZBRFJzUWNHeG9TdTBTZVg4NHNj?= =?utf-8?B?T2lxWFMrT2FYVS9BdmczNVZyZS9hcUxtekUzdUEzMFEyTzlRc2w4UDE2M2hq?= =?utf-8?B?dC96OWtCMUZGY004REVjYzU0Q0h2Nkl2MUV1NC90VmliY3hOZ0pSWUZrc3FN?= =?utf-8?B?Y21NRTVhTi9OYWpaSnYvWkxjb1FyQ3BLSXVqSXlzS01LYXUxc0xPTElPWU1n?= =?utf-8?B?N2YyMjJLbC9md1p4bHMzcFhRM0lpa0txaEZlQ1N0dUVnKy85SThMbUhTZW9i?= =?utf-8?B?aGhodHk2LzlrNjd4ajJRYnhGRmtuQm52UEpNRjNQUzJjYSttMmR6aEtHZEJT?= =?utf-8?B?Ry9ycmFnY1JoSC80S1p0MWltNzJ1TC93Q1lYSWJlRVJuUUtMek1mKy9PTVpj?= =?utf-8?B?OFViUG5sNTA0WFRJdVVVMVdTY1E1ZlFLVSszWXA4cng5dThHZGM2TFM1Uk03?= =?utf-8?B?QjJ1QzlIbjdpQTBZeE9DS1loamZRWm0wSkFVelhHUmk3aElUbGdMSTk5VVll?= =?utf-8?B?VU1uaTRUSEhmcEE4THlWdWZScWtjWEFZSzhTUWJsSUNJdnEvNCtQQ0FnSXdP?= =?utf-8?B?ZmNKeWRyeWlhaWRlOHlLaDYxY2R4VlNtcUlZbGNTTlJGcURaT2VkM3dVckti?= =?utf-8?Q?HncH+jH1HyIXh63MGU=3D?= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;6:Z7DnNpmHPJ0p83twVrPHhz3iSvMDK4hNHWNoMg/qV0ZjkSaIZfVQdXwdK30s3U5NXgSBqFeOJuQw00qtRDj1SfLcxiQyOMu7YW6fX8f85YjdMDqhkmZ+Eype7m6GR/OZZnv+EzengIaJZAutkLbv0lwcfd0/QuIl/bgDcee3qdhgB8087VPodfGKWqWTm/4MuYiYoj9m9vDFUNGJC4Dkr8befbo37WS6MRzve13BO2QvUpnLqS3m5bbuPBLuPxpVdvhIGpRWB7XFNo4lxqao79i4voFmyCdsmunKhx8RrvhugsHaFb3puTptbvFinQcWBlxIihNMqw2kEbHTRVYlAPnDQ/tjZ0xKU/vt1fJgPeODXdG9KZv2WUxKBuYMOVlD9u4GswGrLr+dQDQ17AdYOOERHV8mQrFeZO1hRShZTZyAEze1Y/j4kQBdUGUBySR1e1VhcCqnFkxvWmVwy2BybfO5zjOoh0wX6I9RcZXWcpi1D8gHD+RTV+umE4EckERP/hLZVr8kSZ5bnEva8kcyIT57dk8zRwjpUAIQc7WjLC0= X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;5:1wpFa8Yyn9wNbxWZ+qMug8Wu4odG0Hv1a7uBleYBtiMGW1bjoewrirQhAK1an3UwecDMOS+wu4DfkrW3oz6cxX8p8SpI9QtzH6atW5XmcwLbfW4UeTr83bk83aeszrDE7twB+hvZZGVrnCS2uw1S2znijAuJOLOnr2BjhVXce+LeUvddA4fINbrm7Tu3RLIlBd2qr9vkIH3hbANxbuDkk0uOJNeA8zG0aT4oGmAE5xrqdbOMaOmu+2dy+nT+AvkUUo+YY2dlrU+EfVItTtzDWX0eNj4tc0waNX1wGVXWHBO6qVQbeyOoO4FxMex7EYwucrFxglYPpR6AOh6oezIV7qP6OvXxgEQU8yF3ZrjF2M38VyKjxvYQb1QEgXZawbMUe5rCjAPOnfRO9AV3SojL9Zka8MdiOkWujW3mB9z+Y/M4otv7o0BfZRR+a9HOW9zcZrdKeST6Krkeh21UzR1P/qy04NfbNNgvkzXR65aJ8zi0YnQNxS00PGXuWE6bKzug;24:Py/8Cqyt3zGVfP7p6Yqyunh2UeDfk2D4yn9FCO9Y8aY1hYXX65rgesFGmBolpsKIbHeLmKJKHrBUeWf2YNtVPx4I85j7XmdC9jEpXrerCK4= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CY4PR12MB1141;7:OpJ07NNPUnPuhysVhu4tDSICU5a/B9RlCnPsQ3q1Jeie3cq0KXB5NTBzXMel1ysMPJUmdubNIjjmCXL0H055TPBzY26mid0x8U0JeWo4jVqvXaXs/JUTyvz3EmI8B6Jcw4XXAXrUDr/kF1IKhKvoPtJMknCSA9Ku5hRVzsCDUVKNpAHCr5TBlu4vbqbrdqATplcM4X9+Errb2KoxFunYxXO0/+AMzmMCP82sOF+LPmw9QFEtA7E5gaEPUdS33V6R1VP0BVuOTDcY0KpJ4FM32E1rXITzGH3lzNQO+7vLfe710AONVS1bK2OXAlMvZC4ZVSqqpi2s8gwvd0knsnF2Bg==;20:g1PXEGkcmF4URNlg0okxqIjdarQ8Ew05eYUimMOmftf7/XNwXYFDdKtZzvwO9iJ8Zeuq/mXIoZqGsXNivUka+qbV79FjJLN/T8wjv6cTTG/QFIqwgEmlnPaNE2h+xKqOJWgoQ/D+LTyNpDqS0qclaMObz4Wj3JH41oecfsz0upshaRQVLh645AgAaYdK4Bos3O5MNOW7s02h4yOJTpKnYhA3CMN2/qJMfUltbNaU20jhj/fg3VoFT3zIxY/Bpmqx X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jun 2017 19:16:53.5059 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR12MB1141 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Persistent memory is expected to persist across reboots. The encryption key used by SME will change across reboots which will result in corrupted persistent memory. Persistent memory is handed out by block devices through memory remapping functions, so be sure not to map this memory as encrypted. Signed-off-by: Tom Lendacky --- arch/x86/mm/ioremap.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 34ed59d..99cda55 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -428,17 +428,46 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr) * Examine the physical address to determine if it is an area of memory * that should be mapped decrypted. If the memory is not part of the * kernel usable area it was accessed and created decrypted, so these - * areas should be mapped decrypted. + * areas should be mapped decrypted. And since the encryption key can + * change across reboots, persistent memory should also be mapped + * decrypted. */ static bool memremap_should_map_decrypted(resource_size_t phys_addr, unsigned long size) { + int is_pmem; + + /* + * Check if the address is part of a persistent memory region. + * This check covers areas added by E820, EFI and ACPI. + */ + is_pmem = region_intersects(phys_addr, size, IORESOURCE_MEM, + IORES_DESC_PERSISTENT_MEMORY); + if (is_pmem != REGION_DISJOINT) + return true; + + /* + * Check if the non-volatile attribute is set for an EFI + * reserved area. + */ + if (efi_enabled(EFI_BOOT)) { + switch (efi_mem_type(phys_addr)) { + case EFI_RESERVED_TYPE: + if (efi_mem_attributes(phys_addr) & EFI_MEMORY_NV) + return true; + break; + default: + break; + } + } + /* Check if the address is outside kernel usable area */ switch (e820__get_entry_type(phys_addr, phys_addr + size - 1)) { case E820_TYPE_RESERVED: case E820_TYPE_ACPI: case E820_TYPE_NVS: case E820_TYPE_UNUSABLE: + case E820_TYPE_PRAM: return true; default: break; From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Lendacky Subject: [PATCH v6 21/34] x86/mm: Add support to access persistent memory in the clear Date: Wed, 07 Jun 2017 14:16:51 -0500 Message-ID: <20170607191651.28645.70995.stgit@tlendack-t1.amdoffice.net> References: <20170607191309.28645.15241.stgit@tlendack-t1.amdoffice.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <20170607191309.28645.15241.stgit-qCXWGYdRb2BnqfbPTmsdiZQ+2ll4COg0XqFh9Ls21Oc@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Errors-To: iommu-bounces-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org To: linux-arch-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kvm-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, linux-doc-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, x86-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org, kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, kasan-dev-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org, linux-mm-Bw31MaZKKs3YtjvyW6yDsg@public.gmane.org, iommu-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org Cc: Thomas Gleixner , Rik van Riel , Brijesh Singh , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , Radim =?utf-8?b?S3LEjW3DocWZ?= , Andrey Ryabinin , Ingo Molnar , "Michael S. Tsirkin" , Andy Lutomirski , "H. Peter Anvin" , Borislav Petkov , Paolo Bonzini , Alexander Potapenko , Dave Young , Larry Woodman , Dmitry Vyukov List-Id: linux-efi@vger.kernel.org Persistent memory is expected to persist across reboots. The encryption key used by SME will change across reboots which will result in corrupted persistent memory. Persistent memory is handed out by block devices through memory remapping functions, so be sure not to map this memory as encrypted. Signed-off-by: Tom Lendacky --- arch/x86/mm/ioremap.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 34ed59d..99cda55 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -428,17 +428,46 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr) * Examine the physical address to determine if it is an area of memory * that should be mapped decrypted. If the memory is not part of the * kernel usable area it was accessed and created decrypted, so these - * areas should be mapped decrypted. + * areas should be mapped decrypted. And since the encryption key can + * change across reboots, persistent memory should also be mapped + * decrypted. */ static bool memremap_should_map_decrypted(resource_size_t phys_addr, unsigned long size) { + int is_pmem; + + /* + * Check if the address is part of a persistent memory region. + * This check covers areas added by E820, EFI and ACPI. + */ + is_pmem = region_intersects(phys_addr, size, IORESOURCE_MEM, + IORES_DESC_PERSISTENT_MEMORY); + if (is_pmem != REGION_DISJOINT) + return true; + + /* + * Check if the non-volatile attribute is set for an EFI + * reserved area. + */ + if (efi_enabled(EFI_BOOT)) { + switch (efi_mem_type(phys_addr)) { + case EFI_RESERVED_TYPE: + if (efi_mem_attributes(phys_addr) & EFI_MEMORY_NV) + return true; + break; + default: + break; + } + } + /* Check if the address is outside kernel usable area */ switch (e820__get_entry_type(phys_addr, phys_addr + size - 1)) { case E820_TYPE_RESERVED: case E820_TYPE_ACPI: case E820_TYPE_NVS: case E820_TYPE_UNUSABLE: + case E820_TYPE_PRAM: return true; default: break; From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-io0-f199.google.com (mail-io0-f199.google.com [209.85.223.199]) by kanga.kvack.org (Postfix) with ESMTP id E46BF6B03A1 for ; Wed, 7 Jun 2017 15:16:59 -0400 (EDT) Received: by mail-io0-f199.google.com with SMTP id i132so6147326ioe.5 for ; Wed, 07 Jun 2017 12:16:59 -0700 (PDT) Received: from NAM01-SN1-obe.outbound.protection.outlook.com (mail-sn1nam01on0046.outbound.protection.outlook.com. [104.47.32.46]) by mx.google.com with ESMTPS id w125si3307304itb.16.2017.06.07.12.16.58 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 07 Jun 2017 12:16:59 -0700 (PDT) From: Tom Lendacky Subject: [PATCH v6 21/34] x86/mm: Add support to access persistent memory in the clear Date: Wed, 07 Jun 2017 14:16:51 -0500 Message-ID: <20170607191651.28645.70995.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170607191309.28645.15241.stgit@tlendack-t1.amdoffice.net> References: <20170607191309.28645.15241.stgit@tlendack-t1.amdoffice.net> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Sender: owner-linux-mm@kvack.org List-ID: To: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, iommu@lists.linux-foundation.org Cc: Rik van Riel , Radim =?utf-8?b?S3LEjW3DocWZ?= , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , "Michael S. Tsirkin" , Joerg Roedel , Konrad Rzeszutek Wilk , Paolo Bonzini , Larry Woodman , Brijesh Singh , Ingo Molnar , Borislav Petkov , Andy Lutomirski , "H. Peter Anvin" , Andrey Ryabinin , Alexander Potapenko , Dave Young , Thomas Gleixner , Dmitry Vyukov Persistent memory is expected to persist across reboots. The encryption key used by SME will change across reboots which will result in corrupted persistent memory. Persistent memory is handed out by block devices through memory remapping functions, so be sure not to map this memory as encrypted. Signed-off-by: Tom Lendacky --- arch/x86/mm/ioremap.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 34ed59d..99cda55 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -428,17 +428,46 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr) * Examine the physical address to determine if it is an area of memory * that should be mapped decrypted. If the memory is not part of the * kernel usable area it was accessed and created decrypted, so these - * areas should be mapped decrypted. + * areas should be mapped decrypted. And since the encryption key can + * change across reboots, persistent memory should also be mapped + * decrypted. */ static bool memremap_should_map_decrypted(resource_size_t phys_addr, unsigned long size) { + int is_pmem; + + /* + * Check if the address is part of a persistent memory region. + * This check covers areas added by E820, EFI and ACPI. + */ + is_pmem = region_intersects(phys_addr, size, IORESOURCE_MEM, + IORES_DESC_PERSISTENT_MEMORY); + if (is_pmem != REGION_DISJOINT) + return true; + + /* + * Check if the non-volatile attribute is set for an EFI + * reserved area. + */ + if (efi_enabled(EFI_BOOT)) { + switch (efi_mem_type(phys_addr)) { + case EFI_RESERVED_TYPE: + if (efi_mem_attributes(phys_addr) & EFI_MEMORY_NV) + return true; + break; + default: + break; + } + } + /* Check if the address is outside kernel usable area */ switch (e820__get_entry_type(phys_addr, phys_addr + size - 1)) { case E820_TYPE_RESERVED: case E820_TYPE_ACPI: case E820_TYPE_NVS: case E820_TYPE_UNUSABLE: + case E820_TYPE_PRAM: return true; default: break; -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: email@kvack.org From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-sn1nam01on0040.outbound.protection.outlook.com ([104.47.32.40] helo=NAM01-SN1-obe.outbound.protection.outlook.com) by casper.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1dIgSG-0002DH-7i for kexec@lists.infradead.org; Wed, 07 Jun 2017 19:17:22 +0000 From: Tom Lendacky Subject: [PATCH v6 21/34] x86/mm: Add support to access persistent memory in the clear Date: Wed, 07 Jun 2017 14:16:51 -0500 Message-ID: <20170607191651.28645.70995.stgit@tlendack-t1.amdoffice.net> In-Reply-To: <20170607191309.28645.15241.stgit@tlendack-t1.amdoffice.net> References: <20170607191309.28645.15241.stgit@tlendack-t1.amdoffice.net> MIME-Version: 1.0 List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: linux-arch@vger.kernel.org, linux-efi@vger.kernel.org, kvm@vger.kernel.org, linux-doc@vger.kernel.org, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, iommu@lists.linux-foundation.org Cc: Thomas Gleixner , Rik van Riel , Brijesh Singh , Toshimitsu Kani , Arnd Bergmann , Jonathan Corbet , Matt Fleming , Joerg Roedel , Radim =?utf-8?b?S3LEjW3DocWZ?= , Konrad Rzeszutek Wilk , Andrey Ryabinin , Ingo Molnar , "Michael S. Tsirkin" , Andy Lutomirski , "H. Peter Anvin" , Borislav Petkov , Paolo Bonzini , Alexander Potapenko , Dave Young , Larry Woodman , Dmitry Vyukov Persistent memory is expected to persist across reboots. The encryption key used by SME will change across reboots which will result in corrupted persistent memory. Persistent memory is handed out by block devices through memory remapping functions, so be sure not to map this memory as encrypted. Signed-off-by: Tom Lendacky --- arch/x86/mm/ioremap.c | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c index 34ed59d..99cda55 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -428,17 +428,46 @@ void unxlate_dev_mem_ptr(phys_addr_t phys, void *addr) * Examine the physical address to determine if it is an area of memory * that should be mapped decrypted. If the memory is not part of the * kernel usable area it was accessed and created decrypted, so these - * areas should be mapped decrypted. + * areas should be mapped decrypted. And since the encryption key can + * change across reboots, persistent memory should also be mapped + * decrypted. */ static bool memremap_should_map_decrypted(resource_size_t phys_addr, unsigned long size) { + int is_pmem; + + /* + * Check if the address is part of a persistent memory region. + * This check covers areas added by E820, EFI and ACPI. + */ + is_pmem = region_intersects(phys_addr, size, IORESOURCE_MEM, + IORES_DESC_PERSISTENT_MEMORY); + if (is_pmem != REGION_DISJOINT) + return true; + + /* + * Check if the non-volatile attribute is set for an EFI + * reserved area. + */ + if (efi_enabled(EFI_BOOT)) { + switch (efi_mem_type(phys_addr)) { + case EFI_RESERVED_TYPE: + if (efi_mem_attributes(phys_addr) & EFI_MEMORY_NV) + return true; + break; + default: + break; + } + } + /* Check if the address is outside kernel usable area */ switch (e820__get_entry_type(phys_addr, phys_addr + size - 1)) { case E820_TYPE_RESERVED: case E820_TYPE_ACPI: case E820_TYPE_NVS: case E820_TYPE_UNUSABLE: + case E820_TYPE_PRAM: return true; default: break; _______________________________________________ kexec mailing list kexec@lists.infradead.org http://lists.infradead.org/mailman/listinfo/kexec