From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751532AbdGRLDB (ORCPT ); Tue, 18 Jul 2017 07:03:01 -0400 Received: from terminus.zytor.com ([65.50.211.136]:35967 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751533AbdGRLC6 (ORCPT ); Tue, 18 Jul 2017 07:02:58 -0400 Date: Tue, 18 Jul 2017 03:54:52 -0700 From: tip-bot for Tom Lendacky Message-ID: Cc: bp@alien8.de, brijesh.singh@amd.com, pbonzini@redhat.com, lwoodman@redhat.com, glider@google.com, aryabinin@virtuozzo.com, mst@redhat.com, peterz@infradead.org, thomas.lendacky@amd.com, toshi.kani@hpe.com, arnd@arndb.de, linux-kernel@vger.kernel.org, bp@suse.de, rkrcmar@redhat.com, mingo@kernel.org, hpa@zytor.com, torvalds@linux-foundation.org, konrad.wilk@oracle.com, tglx@linutronix.de, dvyukov@google.com, luto@kernel.org, riel@redhat.com, corbet@lwn.net, matt@codeblueprint.co.uk, dyoung@redhat.com Reply-To: tglx@linutronix.de, dvyukov@google.com, corbet@lwn.net, luto@kernel.org, riel@redhat.com, torvalds@linux-foundation.org, konrad.wilk@oracle.com, hpa@zytor.com, matt@codeblueprint.co.uk, dyoung@redhat.com, brijesh.singh@amd.com, bp@alien8.de, aryabinin@virtuozzo.com, lwoodman@redhat.com, glider@google.com, pbonzini@redhat.com, mingo@kernel.org, bp@suse.de, rkrcmar@redhat.com, toshi.kani@hpe.com, arnd@arndb.de, thomas.lendacky@amd.com, mst@redhat.com, peterz@infradead.org, linux-kernel@vger.kernel.org In-Reply-To: <7d829302d8fdc85f3d9505fc3eb8ec0c3a3e1cbf.1500319216.git.thomas.lendacky@amd.com> References: <7d829302d8fdc85f3d9505fc3eb8ec0c3a3e1cbf.1500319216.git.thomas.lendacky@amd.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/mm] x86/mm: Add support to access persistent memory in the clear Git-Commit-ID: 1de328628cd06b5efff9195b57bdc1a64680814d X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 1de328628cd06b5efff9195b57bdc1a64680814d Gitweb: http://git.kernel.org/tip/1de328628cd06b5efff9195b57bdc1a64680814d Author: Tom Lendacky AuthorDate: Mon, 17 Jul 2017 16:10:18 -0500 Committer: Ingo Molnar CommitDate: Tue, 18 Jul 2017 11:38:02 +0200 x86/mm: Add support to access persistent memory in the clear 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 Reviewed-by: Thomas Gleixner Reviewed-by: Borislav Petkov Cc: Alexander Potapenko Cc: Andrey Ryabinin Cc: Andy Lutomirski Cc: Arnd Bergmann Cc: Borislav Petkov Cc: Brijesh Singh Cc: Dave Young Cc: Dmitry Vyukov Cc: Jonathan Corbet Cc: Konrad Rzeszutek Wilk Cc: Larry Woodman Cc: Linus Torvalds Cc: Matt Fleming Cc: Michael S. Tsirkin Cc: Paolo Bonzini Cc: Peter Zijlstra Cc: Radim Krčmář Cc: Rik van Riel Cc: Toshimitsu Kani Cc: kasan-dev@googlegroups.com Cc: kvm@vger.kernel.org Cc: linux-arch@vger.kernel.org Cc: linux-doc@vger.kernel.org Cc: linux-efi@vger.kernel.org Cc: linux-mm@kvack.org Link: http://lkml.kernel.org/r/7d829302d8fdc85f3d9505fc3eb8ec0c3a3e1cbf.1500319216.git.thomas.lendacky@amd.com Signed-off-by: Ingo Molnar --- 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 8986b28..704fc08 100644 --- a/arch/x86/mm/ioremap.c +++ b/arch/x86/mm/ioremap.c @@ -424,17 +424,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;