• Lianbo Jiang's avatar
    x86/kdump: Always reserve the low 1M when the crashkernel option is specified · 6f599d84
    Lianbo Jiang authored
    On x86, purgatory() copies the first 640K of memory to a backup region
    because the kernel needs those first 640K for the real mode trampoline
    during boot, among others.
    
    However, when SME is enabled, the kernel cannot properly copy the old
    memory to the backup area but reads only its encrypted contents. The
    result is that the crash tool gets invalid pointers when parsing vmcore:
    
      crash> kmem -s|grep -i invalid
      kmem: dma-kmalloc-512: slab:ffffd77680001c00 invalid freepointer:a6086ac099f0c5a4
      kmem: dma-kmalloc-512: slab:ffffd77680001c00 invalid freepointer:a6086ac099f0c5a4
      crash>
    
    So reserve the remaining low 1M memory when the crashkernel option is
    specified (after reserving real mode memory) so that allocated memory
    does not fall into the low 1M area and thus the copying of the contents
    of the first 640k to a backup region in purgatory() can be avoided
    altogether.
    
    This way, it does not need to be included in crash dumps or used for
    anything except the trampolines that must live in the low 1M.
    
     [ bp: Heavily rewrite commit message, flip check logic in
       crash_reserve_low_1M().]
    Signed-off-by: default avatarLianbo Jiang <lijiang@redhat.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: bhe@redhat.com
    Cc: Dave Young <dyoung@redhat.com>
    Cc: d.hatayama@fujitsu.com
    Cc: dhowells@redhat.com
    Cc: ebiederm@xmission.com
    Cc: horms@verge.net.au
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Jürgen Gross <jgross@suse.com>
    Cc: kexec@lists.infradead.org
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Tom Lendacky <thomas.lendacky@amd.com>
    Cc: vgoyal@redhat.com
    Cc: x86-ml <x86@kernel.org>
    Link: https://lkml.kernel.org/r/20191108090027.11082-2-lijiang@redhat.com
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=204793
    6f599d84
init.c 3.93 KB