• Omar Sandoval's avatar
    x86/crash: Define arch_crash_save_vmcoreinfo() if CONFIG_CRASH_CORE=y · 8757dc97
    Omar Sandoval authored
    On x86 kernels configured with CONFIG_PROC_KCORE=y and
    CONFIG_KEXEC_CORE=n, the vmcoreinfo note in /proc/kcore is incomplete.
    
    Specifically, it is missing arch-specific information like the KASLR
    offset and whether 5-level page tables are enabled. This breaks
    applications like drgn [1] and crash [2], which need this information
    for live debugging via /proc/kcore.
    
    This happens because:
    
    1. CONFIG_PROC_KCORE selects CONFIG_CRASH_CORE.
    2. kernel/crash_core.c (compiled if CONFIG_CRASH_CORE=y) calls
       arch_crash_save_vmcoreinfo() to get the arch-specific parts of
       vmcoreinfo. If it is not defined, then it uses a no-op fallback.
    3. x86 defines arch_crash_save_vmcoreinfo() in
       arch/x86/kernel/machine_kexec_*.c, which is only compiled if
       CONFIG_KEXEC_CORE=y.
    
    Therefore, an x86 kernel with CONFIG_CRASH_CORE=y and
    CONFIG_KEXEC_CORE=n uses the no-op fallback and gets incomplete
    vmcoreinfo data. This isn't relevant to kdump, which requires
    CONFIG_KEXEC_CORE. It only affects applications which read vmcoreinfo at
    runtime, like the ones mentioned above.
    
    Fix it by moving arch_crash_save_vmcoreinfo() into two new
    arch/x86/kernel/crash_core_*.c files, which are gated behind
    CONFIG_CRASH_CORE.
    
    1: https://github.com/osandov/drgn/blob/73dd7def1217e24cc83d8ca95c995decbd9ba24c/libdrgn/program.c#L385
    2: https://github.com/crash-utility/crash/commit/60a42d709280cdf38ab06327a5b4fa9d9208ef86Signed-off-by: default avatarOmar Sandoval <osandov@fb.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: Kairui Song <kasong@redhat.com>
    Cc: Lianbo Jiang <lijiang@redhat.com>
    Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
    Cc: "Peter Zijlstra (Intel)" <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: x86-ml <x86@kernel.org>
    Link: https://lkml.kernel.org/r/0589961254102cca23e3618b96541b89f2b249e2.1576858905.git.osandov@fb.com
    8757dc97
machine_kexec_32.c 6.65 KB