From: Tom Lendacky <thomas.lendacky@amd.com>
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, xen-devel@lists.xen.org,
linux-mm@kvack.org, iommu@lists.linux-foundation.org
Cc: "Brijesh Singh" <brijesh.singh@amd.com>,
"Toshimitsu Kani" <toshi.kani@hpe.com>,
"Radim Krčmář" <rkrcmar@redhat.com>,
"Matt Fleming" <matt@codeblueprint.co.uk>,
"Alexander Potapenko" <glider@google.com>,
"H. Peter Anvin" <hpa@zytor.com>,
"Larry Woodman" <lwoodman@redhat.com>,
"Jonathan Corbet" <corbet@lwn.net>,
"Joerg Roedel" <joro@8bytes.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
"Ingo Molnar" <mingo@redhat.com>,
"Andrey Ryabinin" <aryabinin@virtuozzo.com>,
"Dave Young" <dyoung@redhat.com>,
"Rik van Riel" <riel@redhat.com>, "Arnd Bergmann" <arnd@arndb.de>,
"Konrad Rzeszutek Wilk" <konrad.wilk@oracle.com>,
"Borislav Petkov" <bp@alien8.de>,
"Andy Lutomirski" <luto@kernel.org>,
"Boris Ostrovsky" <boris.ostrovsky@oracle.com>,
"Dmitry Vyukov" <dvyukov@google.com>,
"Juergen Gross" <jgross@suse.com>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Paolo Bonzini" <pbonzini@redhat.com>
Subject: [PATCH v9 18/38] x86/efi: Update EFI pagetable creation to work with SME
Date: Fri, 07 Jul 2017 08:41:22 -0500 [thread overview]
Message-ID: <20170707134122.29711.68794.stgit@tlendack-t1.amdoffice.net> (raw)
In-Reply-To: <20170707133804.29711.1616.stgit@tlendack-t1.amdoffice.net>
When SME is active, pagetable entries created for EFI need to have the
encryption mask set as necessary.
When the new pagetable pages are allocated they are mapped encrypted. So,
update the efi_pgt value that will be used in cr3 to include the encryption
mask so that the PGD table can be read successfully. The pagetable mapping
as well as the kernel are also added to the pagetable mapping as encrypted.
All other EFI mappings are mapped decrypted (tables, etc.).
Reviewed-by: Matt Fleming <matt@codeblueprint.co.uk>
Reviewed-by: Borislav Petkov <bp@suse.de>
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
---
arch/x86/platform/efi/efi_64.c | 15 +++++++++++----
1 file changed, 11 insertions(+), 4 deletions(-)
diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c
index 9bf72f5..12e8388 100644
--- a/arch/x86/platform/efi/efi_64.c
+++ b/arch/x86/platform/efi/efi_64.c
@@ -327,7 +327,7 @@ void efi_sync_low_kernel_mappings(void)
int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
{
- unsigned long pfn, text;
+ unsigned long pfn, text, pf;
struct page *page;
unsigned npages;
pgd_t *pgd;
@@ -335,7 +335,12 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
if (efi_enabled(EFI_OLD_MEMMAP))
return 0;
- efi_scratch.efi_pgt = (pgd_t *)__pa(efi_pgd);
+ /*
+ * Since the PGD is encrypted, set the encryption mask so that when
+ * this value is loaded into cr3 the PGD will be decrypted during
+ * the pagetable walk.
+ */
+ efi_scratch.efi_pgt = (pgd_t *)__sme_pa(efi_pgd);
pgd = efi_pgd;
/*
@@ -345,7 +350,8 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
* phys_efi_set_virtual_address_map().
*/
pfn = pa_memmap >> PAGE_SHIFT;
- if (kernel_map_pages_in_pgd(pgd, pfn, pa_memmap, num_pages, _PAGE_NX | _PAGE_RW)) {
+ pf = _PAGE_NX | _PAGE_RW | _PAGE_ENC;
+ if (kernel_map_pages_in_pgd(pgd, pfn, pa_memmap, num_pages, pf)) {
pr_err("Error ident-mapping new memmap (0x%lx)!\n", pa_memmap);
return 1;
}
@@ -388,7 +394,8 @@ int __init efi_setup_page_tables(unsigned long pa_memmap, unsigned num_pages)
text = __pa(_text);
pfn = text >> PAGE_SHIFT;
- if (kernel_map_pages_in_pgd(pgd, pfn, text, npages, _PAGE_RW)) {
+ pf = _PAGE_RW | _PAGE_ENC;
+ if (kernel_map_pages_in_pgd(pgd, pfn, text, npages, pf)) {
pr_err("Failed to map kernel text 1:1\n");
return 1;
}
--
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: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2017-07-07 13:41 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-07-07 13:38 [PATCH v9 00/38] x86: Secure Memory Encryption (AMD) Tom Lendacky
2017-07-07 13:38 ` [PATCH v9 01/38] x86: Document AMD Secure Memory Encryption (SME) Tom Lendacky
2017-07-07 13:38 ` [PATCH v9 02/38] x86/mm/pat: Set write-protect cache mode for full PAT support Tom Lendacky
2017-07-07 13:38 ` [PATCH v9 03/38] x86, mpparse, x86/acpi, x86/PCI, x86/dmi, SFI: Use memremap for RAM mappings Tom Lendacky
2017-07-07 13:38 ` [PATCH v9 04/38] x86/CPU/AMD: Add the Secure Memory Encryption CPU feature Tom Lendacky
2017-07-08 12:50 ` Brian Gerst
2017-07-10 19:41 ` Tom Lendacky
2017-07-11 5:07 ` Brian Gerst
2017-07-11 5:56 ` Borislav Petkov
2017-07-11 15:14 ` Tom Lendacky
2017-07-11 15:12 ` Tom Lendacky
2017-07-07 13:39 ` [PATCH v9 05/38] x86/CPU/AMD: Handle SME reduction in physical address size Tom Lendacky
2017-07-07 13:39 ` [PATCH v9 06/38] x86/mm: Add Secure Memory Encryption (SME) support Tom Lendacky
2017-07-07 13:39 ` [PATCH v9 07/38] x86/mm: Remove phys_to_virt() usage in ioremap() Tom Lendacky
2017-07-08 12:57 ` Brian Gerst
2017-07-10 19:50 ` Tom Lendacky
2017-07-11 4:58 ` Brian Gerst
2017-07-11 8:35 ` Arnd Bergmann
2017-07-11 12:00 ` Brian Gerst
2017-07-11 15:02 ` Tom Lendacky
2017-07-11 15:38 ` Brian Gerst
2017-07-11 15:44 ` Tom Lendacky
2017-07-07 13:39 ` [PATCH v9 08/38] x86/mm: Add support to enable SME in early boot processing Tom Lendacky
2017-07-07 13:39 ` [PATCH v9 09/38] x86/mm: Simplify p[g4um]d_page() macros Tom Lendacky
2017-07-07 13:39 ` [PATCH v9 10/38] x86/mm: Provide general kernel support for memory encryption Tom Lendacky
2017-07-07 13:40 ` [PATCH v9 11/38] x86/mm: Add SME support for read_cr3_pa() Tom Lendacky
2017-07-07 13:40 ` [PATCH v9 12/38] x86/mm: Extend early_memremap() support with additional attrs Tom Lendacky
2017-07-07 13:40 ` [PATCH v9 13/38] x86/mm: Add support for early encrypt/decrypt of memory Tom Lendacky
2017-07-07 13:40 ` [PATCH v9 14/38] x86/mm: Insure that boot memory areas are mapped properly Tom Lendacky
2017-07-07 13:40 ` [PATCH v9 15/38] x86/boot/e820: Add support to determine the E820 type of an address Tom Lendacky
2017-07-07 13:41 ` [PATCH v9 16/38] efi: Add an EFI table address match function Tom Lendacky
2017-07-07 13:41 ` [PATCH v9 17/38] efi: Update efi_mem_type() to return an error rather than 0 Tom Lendacky
2017-07-07 13:41 ` Tom Lendacky [this message]
2017-07-07 13:41 ` [PATCH v9 19/38] x86/mm: Add support to access boot related data in the clear Tom Lendacky
2017-07-07 13:41 ` [PATCH v9 20/38] x86, mpparse: Use memremap to map the mpf and mpc data Tom Lendacky
2017-07-07 13:41 ` [PATCH v9 21/38] x86/mm: Add support to access persistent memory in the clear Tom Lendacky
2017-07-07 13:42 ` [PATCH v9 22/38] x86/mm: Add support for changing the memory encryption attribute Tom Lendacky
2017-07-07 13:42 ` [PATCH v9 23/38] x86/realmode: Decrypt trampoline area if memory encryption is active Tom Lendacky
2017-07-07 13:42 ` [PATCH v9 24/38] x86, swiotlb: Add memory encryption support Tom Lendacky
2017-07-07 13:42 ` [PATCH v9 25/38] swiotlb: Add warnings for use of bounce buffers with SME Tom Lendacky
2017-07-07 13:42 ` [PATCH v9 26/38] x86/CPU/AMD: Make the microcode level available earlier in the boot Tom Lendacky
2017-07-07 13:43 ` [PATCH v9 27/38] iommu/amd: Allow the AMD IOMMU to work with memory encryption Tom Lendacky
2017-07-07 13:43 ` [PATCH v9 28/38] x86, realmode: Check for memory encryption on the APs Tom Lendacky
2017-07-07 13:43 ` [PATCH v9 29/38] x86, drm, fbdev: Do not specify encrypted memory for video mappings Tom Lendacky
2017-07-07 13:43 ` [PATCH v9 30/38] kvm: x86: svm: Support Secure Memory Encryption within KVM Tom Lendacky
2017-07-07 13:43 ` [PATCH v9 31/38] x86/mm, kexec: Allow kexec to be used with SME Tom Lendacky
2017-07-07 13:44 ` [PATCH v9 32/38] xen/x86: Remove SME feature in PV guests Tom Lendacky
2017-07-07 13:44 ` [PATCH v9 33/38] x86/mm: Use proper encryption attributes with /dev/mem Tom Lendacky
2017-07-07 13:44 ` [PATCH v9 34/38] x86/mm: Create native_make_p4d() for PGTABLE_LEVELS <= 4 Tom Lendacky
2017-07-07 13:44 ` [PATCH v9 35/38] x86/mm: Add support to encrypt the kernel in-place Tom Lendacky
2017-07-07 13:44 ` [PATCH v9 36/38] x86/boot: Add early cmdline parsing for options with arguments Tom Lendacky
2017-07-07 13:45 ` [PATCH v9 37/38] compiler-gcc.h: Introduce __nostackp function attribute Tom Lendacky
2017-07-07 13:45 ` [PATCH v9 38/38] x86/mm: Add support to make use of Secure Memory Encryption Tom Lendacky
2017-07-08 9:24 ` [PATCH v9 00/38] x86: Secure Memory Encryption (AMD) Ingo Molnar
2017-07-10 18:04 ` Tom Lendacky
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20170707134122.29711.68794.stgit@tlendack-t1.amdoffice.net \
--to=thomas.lendacky@amd.com \
--cc=arnd@arndb.de \
--cc=aryabinin@virtuozzo.com \
--cc=boris.ostrovsky@oracle.com \
--cc=bp@alien8.de \
--cc=brijesh.singh@amd.com \
--cc=corbet@lwn.net \
--cc=dvyukov@google.com \
--cc=dyoung@redhat.com \
--cc=glider@google.com \
--cc=hpa@zytor.com \
--cc=iommu@lists.linux-foundation.org \
--cc=jgross@suse.com \
--cc=joro@8bytes.org \
--cc=kasan-dev@googlegroups.com \
--cc=kexec@lists.infradead.org \
--cc=konrad.wilk@oracle.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-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=luto@kernel.org \
--cc=lwoodman@redhat.com \
--cc=matt@codeblueprint.co.uk \
--cc=mingo@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=riel@redhat.com \
--cc=rkrcmar@redhat.com \
--cc=tglx@linutronix.de \
--cc=toshi.kani@hpe.com \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xen.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox