On Mon, Jul 02, 2018 at 11:48:28AM +0300, Andrey Ryabinin wrote: > commit 0e311d237d7f3022b7dafb639b42541bfb42fe94 upstream. > > When the P4D page table layer is folded at runtime, the p4d_free() > should do nothing, the same as in <asm-generic/pgtable-nop4d.h>. > > It seems this bug should cause double-free in efi_call_phys_epilog(), > but I don't know how to trigger that code path, so I can't confirm that > by testing. > > Signed-off-by: Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx> > Reviewed-by: Kirill A. Shutemov <kirill.shutemov@xxxxxxxxxxxxxxx> > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx # 4.17 > Fixes: 98219dda2ab5 ("x86/mm: Fold p4d page table layer at runtime") > Link: http://lkml.kernel.org/r/20180625102427.15015-1-aryabinin@xxxxxxxxxxxxx > Signed-off-by: Ingo Molnar <mingo@xxxxxxxxxx> > Signed-off-by: Andrey Ryabinin <aryabinin@xxxxxxxxxxxxx> > --- > > Changes since v1: > - Fix wrong "From:" field > > arch/x86/include/asm/pgalloc.h | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/arch/x86/include/asm/pgalloc.h b/arch/x86/include/asm/pgalloc.h > index 263c142a6a6c..f65e9e1cea4c 100644 > --- a/arch/x86/include/asm/pgalloc.h > +++ b/arch/x86/include/asm/pgalloc.h > @@ -184,6 +184,9 @@ static inline p4d_t *p4d_alloc_one(struct mm_struct *mm, unsigned long addr) > > static inline void p4d_free(struct mm_struct *mm, p4d_t *p4d) > { > + if (!pgtable_l5_enabled) > + return; > + Again, did you actually test-build this? What changed from the original patch which blew the build up into little tiny pieces? greg k-h