Skip to contentSkip to conversation

4.4 and 4.9 stable fixes for l1tf patches

PATCH In review Andi Kleen 3 participants 5 messages Aug 20, 2018 – Aug 21, 2018

Subsystems (7)
lore
Share & tools
lore

Andi Kleen

author
#0 lore raw

There was a report that syzkaller can causes crashes in 4.4 and 4.9 stable with the L1TF patches applied.

In my tests this is fixed with applying the following backport from mainline too, as suggested by Michael Hocko.

author
#1 lore raw

PATCH 1/1 x86/mm: Simplify p[g4um]d_page() macros

From: Andi Kleen <[email protected]>

Create a pgd_pfn() macro similar to the p[4um]d_pfn() macros and then use the p[g4um]d_pfn() macros in the p[g4um]d_page() macros instead of duplicating the code.

Cc Alexander Potapenko <[email protected]>
Cc Andrey Ryabinin <[email protected]>
Cc Andy Lutomirski <[email protected]>
Cc Arnd Bergmann <[email protected]>
Cc Borislav Petkov <[email protected]>
Cc Brijesh Singh <[email protected]>
Cc Dave Young <[email protected]>
Cc Dmitry Vyukov <[email protected]>
Cc Jonathan Corbet <[email protected]>
Cc Konrad Rzeszutek Wilk <[email protected]>
Cc Larry Woodman <[email protected]>
Cc Linus Torvalds <[email protected]>
Cc Matt Fleming <[email protected]>
Cc Michael S. Tsirkin <[email protected]>
Cc Paolo Bonzini <[email protected]>
Cc Peter Zijlstra <[email protected]>
Cc Radim Krčmář <[email protected]>
Cc Rik van Riel <[email protected]>
Cc Toshimitsu Kani <[email protected]>
[Backported to 4.9 stable by AK, suggested by Michael Hocko]
---
 arch/x86/include/asm/pgtable.h | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)
arch/x86/include/asm/pgtable.h +8 -5
index 4de6c282c02a..68a55273ce0f 100644
@@ -173,6 +173,11 @@ static inline unsigned long pud_pfn(pud_t pud)
 	return (pfn & pud_pfn_mask(pud)) >> PAGE_SHIFT;
 }
 
+static inline unsigned long pgd_pfn(pgd_t pgd)
+{
+	return (pgd_val(pgd) & PTE_PFN_MASK) >> PAGE_SHIFT;
+}
+
 #define pte_page(pte)	pfn_to_page(pte_pfn(pte))
 
 static inline int pmd_large(pmd_t pte)
@@ -578,8 +583,7 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd)
  * Currently stuck as a macro due to indirect forward reference to
  * linux/mmzone.h's __section_mem_map_addr() definition:
  */
-#define pmd_page(pmd)		\
-	pfn_to_page((pmd_val(pmd) & pmd_pfn_mask(pmd)) >> PAGE_SHIFT)
+#define pmd_page(pmd)	pfn_to_page(pmd_pfn(pmd))
 
 /*
  * the pmd page can be thought of an array like this: pmd_t[PTRS_PER_PMD]
@@ -647,8 +651,7 @@ static inline unsigned long pud_page_vaddr(pud_t pud)
  * Currently stuck as a macro due to indirect forward reference to
  * linux/mmzone.h's __section_mem_map_addr() definition:
  */
-#define pud_page(pud)		\
-	pfn_to_page((pud_val(pud) & pud_pfn_mask(pud)) >> PAGE_SHIFT)
+#define pud_page(pud)	pfn_to_page(pud_pfn(pud))
 
 /* Find an entry in the second-level page table.. */
 static inline pmd_t *pmd_offset(pud_t *pud, unsigned long address)
@@ -688,7 +691,7 @@ static inline unsigned long pgd_page_vaddr(pgd_t pgd)
  * Currently stuck as a macro due to indirect forward reference to
  * linux/mmzone.h's __section_mem_map_addr() definition:
  */
-#define pgd_page(pgd)		pfn_to_page(pgd_val(pgd) >> PAGE_SHIFT)
+#define pgd_page(pgd)		pfn_to_page(pgd_pfn(pgd))
 
 /* to find an entry in a page-table-directory. */
 static inline unsigned long pud_index(unsigned long address)
Signature · 1 line
2.17.1
#2 lore raw

Re: [PATCH] x86/mm: Simplify p[g4um]d_page() macros

Quoted 6 lines · Andi Kleen

From: Andi Kleen <[email protected]>

Create a pgd_pfn() macro similar to the p[4um]d_pfn() macros and then use the p[g4um]d_pfn() macros in the p[g4um]d_page() macros instead of duplicating the code.

When doing backports, _please_ explicitly specify which commit this is upstream too.

Also, the original upstream patch is credited to Tom Lendacky.

Or is there something I'm not seeing, and this is different from commit fd7e315988b7 ("x86/mm: Simplify p[g4um]d_page() macros")?

Linus

author
#3 lore raw

Re: [PATCH] x86/mm: Simplify p[g4um]d_page() macros

Quoted 10 lines · Linus Torvalds
Quoted 6 lines · Andi Kleen

From: Andi Kleen <[email protected]>

Create a pgd_pfn() macro similar to the p[4um]d_pfn() macros and then use the p[g4um]d_pfn() macros in the p[g4um]d_page() macros instead of duplicating the code.

When doing backports, _please_ explicitly specify which commit this is upstream too.

Ok.

Quoted 2 lines

Also, the original upstream patch is credited to Tom Lendacky.

Okay.

Quoted 3 lines

Or is there something I'm not seeing, and this is different from commit fd7e315988b7 ("x86/mm: Simplify p[g4um]d_page() macros")?

No it's Tom's patch just ported to the older tree with some minor changes. I just fat fingered it while doing the commit

-Andi

#4 lore raw

Re: [PATCH] x86/mm: Simplify p[g4um]d_page() macros

Quoted 17 lines · Andi Kleen
Quoted 10 lines · Linus Torvalds
Quoted 6 lines · Andi Kleen

From: Andi Kleen <[email protected]>

Create a pgd_pfn() macro similar to the p[4um]d_pfn() macros and then use the p[g4um]d_pfn() macros in the p[g4um]d_page() macros instead of duplicating the code.

When doing backports, _please_ explicitly specify which commit this is upstream too.

Ok.

Quoted 2 lines

Also, the original upstream patch is credited to Tom Lendacky.

Quoted 8 lines

Okay.

Quoted 3 lines

Or is there something I'm not seeing, and this is different from commit fd7e315988b7 ("x86/mm: Simplify p[g4um]d_page() macros")?

No it's Tom's patch just ported to the older tree with some minor changes. I just fat fingered it while doing the commit

Ok, I've fixed this up by hand now, please be more careful next time.

greg k-h