| From d594aa0277e541bb997aef0bc0a55172d8138340 Mon Sep 17 00:00:00 2001 |
| From: Ashish Kalra <ashish@bluestacks.com> |
| Date: Wed, 19 Apr 2017 20:50:15 +0530 |
| Subject: [PATCH] x86/boot: Fix BSS corruption/overwrite bug in early x86 |
| kernel startup |
| |
| commit d594aa0277e541bb997aef0bc0a55172d8138340 upstream. |
| |
| The minimum size for a new stack (512 bytes) setup for arch/x86/boot components |
| when the bootloader does not setup/provide a stack for the early boot components |
| is not "enough". |
| |
| The setup code executing as part of early kernel startup code, uses the stack |
| beyond 512 bytes and accidentally overwrites and corrupts part of the BSS |
| section. This is exposed mostly in the early video setup code, where |
| it was corrupting BSS variables like force_x, force_y, which in-turn affected |
| kernel parameters such as screen_info (screen_info.orig_video_cols) and |
| later caused an exception/panic in console_init(). |
| |
| Most recent boot loaders setup the stack for early boot components, so this |
| stack overwriting into BSS section issue has not been exposed. |
| |
| Signed-off-by: Ashish Kalra <ashish@bluestacks.com> |
| Cc: <stable@vger.kernel.org> |
| Cc: Andy Lutomirski <luto@kernel.org> |
| Cc: Borislav Petkov <bp@alien8.de> |
| Cc: Brian Gerst <brgerst@gmail.com> |
| Cc: Denys Vlasenko <dvlasenk@redhat.com> |
| Cc: H. Peter Anvin <hpa@zytor.com> |
| Cc: Josh Poimboeuf <jpoimboe@redhat.com> |
| Cc: Linus Torvalds <torvalds@linux-foundation.org> |
| Cc: Peter Zijlstra <peterz@infradead.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Link: http://lkml.kernel.org/r/20170419152015.10011-1-ashishkalra@Ashishs-MacBook-Pro.local |
| Signed-off-by: Ingo Molnar <mingo@kernel.org> |
| |
| diff --git a/arch/x86/boot/boot.h b/arch/x86/boot/boot.h |
| index 9b42b6d1e902..ef5a9cc66fb8 100644 |
| --- a/arch/x86/boot/boot.h |
| +++ b/arch/x86/boot/boot.h |
| @@ -16,7 +16,7 @@ |
| #ifndef BOOT_BOOT_H |
| #define BOOT_BOOT_H |
| |
| -#define STACK_SIZE 512 /* Minimum number of bytes for stack */ |
| +#define STACK_SIZE 1024 /* Minimum number of bytes for stack */ |
| |
| #ifndef __ASSEMBLY__ |
| |
| -- |
| 2.12.0 |
| |