aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2018-08-07 18:09:39 -0400
committerThomas Gleixner <tglx@linutronix.de>2018-08-08 03:23:44 -0400
commit958f79b9ee55dfaf00c8106ed1c22a2919e0028b (patch)
treebb9fd5bb50e6506b910608265d5b4434dd2b2777
parent0768f91530ff46683e0b372df14fd79fe8d156e5 (diff)
x86/mm/pat: Make set_memory_np() L1TF safe
set_memory_np() is used to mark kernel mappings not present, but it has it's own open coded mechanism which does not have the L1TF protection of inverting the address bits. Replace the open coded PTE manipulation with the L1TF protecting low level PTE routines. Passes the CPA self test. Signed-off-by: Andi Kleen <ak@linux.intel.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--arch/x86/mm/pageattr.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/arch/x86/mm/pageattr.c b/arch/x86/mm/pageattr.c
index 3bded76e8d5c..7bb6f65c79de 100644
--- a/arch/x86/mm/pageattr.c
+++ b/arch/x86/mm/pageattr.c
@@ -1014,8 +1014,8 @@ static long populate_pmd(struct cpa_data *cpa,
1014 1014
1015 pmd = pmd_offset(pud, start); 1015 pmd = pmd_offset(pud, start);
1016 1016
1017 set_pmd(pmd, __pmd(cpa->pfn << PAGE_SHIFT | _PAGE_PSE | 1017 set_pmd(pmd, pmd_mkhuge(pfn_pmd(cpa->pfn,
1018 massage_pgprot(pmd_pgprot))); 1018 canon_pgprot(pmd_pgprot))));
1019 1019
1020 start += PMD_SIZE; 1020 start += PMD_SIZE;
1021 cpa->pfn += PMD_SIZE >> PAGE_SHIFT; 1021 cpa->pfn += PMD_SIZE >> PAGE_SHIFT;
@@ -1087,8 +1087,8 @@ static int populate_pud(struct cpa_data *cpa, unsigned long start, p4d_t *p4d,
1087 * Map everything starting from the Gb boundary, possibly with 1G pages 1087 * Map everything starting from the Gb boundary, possibly with 1G pages
1088 */ 1088 */
1089 while (boot_cpu_has(X86_FEATURE_GBPAGES) && end - start >= PUD_SIZE) { 1089 while (boot_cpu_has(X86_FEATURE_GBPAGES) && end - start >= PUD_SIZE) {
1090 set_pud(pud, __pud(cpa->pfn << PAGE_SHIFT | _PAGE_PSE | 1090 set_pud(pud, pud_mkhuge(pfn_pud(cpa->pfn,
1091 massage_pgprot(pud_pgprot))); 1091 canon_pgprot(pud_pgprot))));
1092 1092
1093 start += PUD_SIZE; 1093 start += PUD_SIZE;
1094 cpa->pfn += PUD_SIZE >> PAGE_SHIFT; 1094 cpa->pfn += PUD_SIZE >> PAGE_SHIFT;