From: Greg Kroah-Hartman Date: Mon, 19 Mar 2018 09:22:57 +0000 (+0100) Subject: 4.9-stable patches X-Git-Tag: v4.15.12~28 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=96eb4f55c1ca83cfc0d8b736558011db3092bcdb;p=thirdparty%2Fkernel%2Fstable-queue.git 4.9-stable patches added patches: x86-boot-32-fix-up-boot-on-quark-and-possibly-other-platforms.patch --- diff --git a/queue-4.9/series b/queue-4.9/series index 2b8800de6ce..ef3e63f38c4 100644 --- a/queue-4.9/series +++ b/queue-4.9/series @@ -208,3 +208,4 @@ rcutorture-configinit-fix-build-directory-error-message.patch locking-locktorture-fix-num-reader-writer-corner-cases.patch ima-relax-requiring-a-file-signature-for-new-files-with-zero-length.patch net-hns-some-checkpatch.pl-script-warning-fixes.patch +x86-boot-32-fix-up-boot-on-quark-and-possibly-other-platforms.patch diff --git a/queue-4.9/x86-boot-32-fix-up-boot-on-quark-and-possibly-other-platforms.patch b/queue-4.9/x86-boot-32-fix-up-boot-on-quark-and-possibly-other-platforms.patch new file mode 100644 index 00000000000..46a7ee3dcb2 --- /dev/null +++ b/queue-4.9/x86-boot-32-fix-up-boot-on-quark-and-possibly-other-platforms.patch @@ -0,0 +1,91 @@ +From d2b6dc61a8dd3c429609b993778cb54e75a5c5f0 Mon Sep 17 00:00:00 2001 +From: Andy Lutomirski +Date: Mon, 8 May 2017 17:09:10 -0700 +Subject: x86/boot/32: Fix UP boot on Quark and possibly other platforms + +From: Andy Lutomirski + +commit d2b6dc61a8dd3c429609b993778cb54e75a5c5f0 upstream. + +This partially reverts commit: + + 23b2a4ddebdd17f ("x86/boot/32: Defer resyncing initial_page_table until per-cpu is set up") + +That commit had one definite bug and one potential bug. The +definite bug is that setup_per_cpu_areas() uses a differnet generic +implementation on UP kernels, so initial_page_table never got +resynced. This was fine for access to percpu data (it's in the +identity map on UP), but it breaks other users of +initial_page_table. The potential bug is that helpers like +efi_init() would be called before the tables were synced. + +Avoid both problems by just syncing the page tables in setup_arch() +*and* setup_per_cpu_areas(). + +Reported-by: Jan Kiszka +Signed-off-by: Andy Lutomirski +Cc: Andy Shevchenko +Cc: Ard Biesheuvel +Cc: Boris Ostrovsky +Cc: Borislav Petkov +Cc: Brian Gerst +Cc: Denys Vlasenko +Cc: Josh Poimboeuf +Cc: Juergen Gross +Cc: Linus Torvalds +Cc: Matt Fleming +Cc: Peter Zijlstra +Cc: Thomas Garnier +Cc: Thomas Gleixner +Cc: linux-efi@vger.kernel.org +Signed-off-by: Ingo Molnar +Signed-off-by: Greg Kroah-Hartman + +--- + arch/x86/kernel/setup.c | 15 +++++++++++++++ + arch/x86/kernel/setup_percpu.c | 10 +++++----- + 2 files changed, 20 insertions(+), 5 deletions(-) + +--- a/arch/x86/kernel/setup.c ++++ b/arch/x86/kernel/setup.c +@@ -1200,6 +1200,21 @@ void __init setup_arch(char **cmdline_p) + + kasan_init(); + ++#ifdef CONFIG_X86_32 ++ /* sync back kernel address range */ ++ clone_pgd_range(initial_page_table + KERNEL_PGD_BOUNDARY, ++ swapper_pg_dir + KERNEL_PGD_BOUNDARY, ++ KERNEL_PGD_PTRS); ++ ++ /* ++ * sync back low identity map too. It is used for example ++ * in the 32-bit EFI stub. ++ */ ++ clone_pgd_range(initial_page_table, ++ swapper_pg_dir + KERNEL_PGD_BOUNDARY, ++ min(KERNEL_PGD_PTRS, KERNEL_PGD_BOUNDARY)); ++#endif ++ + tboot_probe(); + + map_vsyscall(); +--- a/arch/x86/kernel/setup_percpu.c ++++ b/arch/x86/kernel/setup_percpu.c +@@ -290,11 +290,11 @@ void __init setup_per_cpu_areas(void) + + #ifdef CONFIG_X86_32 + /* +- * Sync back kernel address range. We want to make sure that +- * all kernel mappings, including percpu mappings, are available +- * in the smpboot asm. We can't reliably pick up percpu +- * mappings using vmalloc_fault(), because exception dispatch +- * needs percpu data. ++ * Sync back kernel address range again. We already did this in ++ * setup_arch(), but percpu data also needs to be available in ++ * the smpboot asm. We can't reliably pick up percpu mappings ++ * using vmalloc_fault(), because exception dispatch needs ++ * percpu data. + */ + clone_pgd_range(initial_page_table + KERNEL_PGD_BOUNDARY, + swapper_pg_dir + KERNEL_PGD_BOUNDARY,