Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp239789ybl; Mon, 2 Dec 2019 10:04:21 -0800 (PST) X-Google-Smtp-Source: APXvYqw9TuBvfC/M3IWoAeb7GRMpfrGZkNGFCYIvS72VyTuvRImFtPrdG5jMpUVpn0upPHZ+qbJi X-Received: by 2002:a17:906:7b96:: with SMTP id s22mr457581ejo.318.1575309861844; Mon, 02 Dec 2019 10:04:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575309861; cv=none; d=google.com; s=arc-20160816; b=aggy0Q1hBhnlglOKZVbGtsD3R9J+MKqsi3V78ctML7d5KimdYt5NU+zBdxEZbdgNib Cnjyo30Br2fAPp3GjpndgSZabUXPx0w7rLnT7Act6FR3IfIJO8rgOQWzW2wLyJSgQ3ej Vtnnwr5exENiAD3UDdo0CfmFtzVJOg+UT2tiEDLqMd/qx5AXtg2CJPLTnDAWg2Oq2vKX 30PI6lCPUZAYKBsJA9gXwEpzjXrphivr5A+BiLArQuj8Mksc7YwqyZzT2caFei1wo3b6 9Mnfo/rWiB//PebJBEPBJVDuLmKEvMKtH7idTCiiDumh8OQfSwghtX2FNrvV/bOG3mCV WqZA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=ax7AJFFSOuj9/KpKJurbPo//Js3m9VypMUOlCMjR8xE=; b=qPyf5Iq66HnN42sh31Dn8+5fs5IZphhy06Xn7vd0uxju9RGvD8YzYKgXT76BQOF6Km fs9oBWs+AFPSSANhhh4Y4R8cv+uQkOozyXwFcOo7iMdxs0tFNIp6ttIOBFzCKPN1T+be pxI9r/v2N9x6mhhLzhygsJm8uc8H5Z+Po404POz8LKMdR/iud3a7kc30jaKwTFalci1R 3gkJbSgTFZBUTIgWLe/sNtpAVT2QoHPqtrXoi0rRZoHcyCN2AcoyxihahIM0PR8La1Tt R0eh50xSWe8c1sxNKwK2D/ubGvbsNqEd//vbm8OD/fNkC1kINxWvCQm+yoS8RLgvi+Ww 1y6w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@osandov-com.20150623.gappssmtp.com header.s=20150623 header.b=wbLoAhpI; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id d7si147947ejr.341.2019.12.02.10.03.57; Mon, 02 Dec 2019 10:04:21 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@osandov-com.20150623.gappssmtp.com header.s=20150623 header.b=wbLoAhpI; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727860AbfLBSCl (ORCPT + 99 others); Mon, 2 Dec 2019 13:02:41 -0500 Received: from mail-pj1-f65.google.com ([209.85.216.65]:38064 "EHLO mail-pj1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727670AbfLBSCl (ORCPT ); Mon, 2 Dec 2019 13:02:41 -0500 Received: by mail-pj1-f65.google.com with SMTP id l4so54159pjt.5 for ; Mon, 02 Dec 2019 10:02:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=osandov-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ax7AJFFSOuj9/KpKJurbPo//Js3m9VypMUOlCMjR8xE=; b=wbLoAhpI3zpBjumoLAzDXqBKlWvYOrMKC+8KTct/2ORkshG4rYi/a7x0z9skQ+UF+i pFG4vX6HeqoW5shQ3FiUohzpdRU54TytrpO3JqKdf2AzV4CO2ZKFhOXi4N0pdPDzVa3b EK7+VjR8fII3C+LF2LTpyUG7oBhNIoyUqYMjlsYyBIBmsTEjISbd55+eN+XOv3LPbdgb ZdHldWIhYaOGA27oa3KJENfT300RwkByoHZvHrrq4zlMhaC6lHKHUb/w6rscWDMkJRjl MhB/LESi9BWJS3kp/qKn4Sa57vOP49mRCFKpCSkvEzJsaydTg30Gl2vIDLvQ5e8zlQ3Z hLKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=ax7AJFFSOuj9/KpKJurbPo//Js3m9VypMUOlCMjR8xE=; b=ElnbKVBKrz9zPbgv66tb8cinhacRmtmyWvUa7hOtlHFOKDOzgfl0U6EjVegDciFe10 ZCrKquGDiUf0pWup2klma9HNtiAXFRYpKrZvPjnMXabq/uy35nVVQH3sO/aY+8Yxl8DS oXGrvfRPNkAg5UMHmnoJqPJhEgugMTgUnKsHZBbcyGf+wy1Xdmb2dEeeaMTp81juquC6 YBkoY6rye1sS5a9m84/sbIFS5NxhW7juj9WV0KowzhBstoaPQ+ql7FnXAOHNZCC15xLS BFcEtc05RCB/yvgZ81FieYtmqh0tsvnFVfUgycFT7zzl3Ow1y/jnI1NjbyGPcc9jjamd tRlg== X-Gm-Message-State: APjAAAX/f7Rxxi5a2mjjqWESzvmf7KyIVhtyjd6hlDJUIEliw7gereB+ iLK3v6Wq0ZXx6cFR4KuuGxjJHA== X-Received: by 2002:a17:90a:aa96:: with SMTP id l22mr341827pjq.112.1575309760080; Mon, 02 Dec 2019 10:02:40 -0800 (PST) Received: from vader.thefacebook.com ([2620:10d:c090:200::3:4fcf]) by smtp.gmail.com with ESMTPSA id x2sm238373pgc.67.2019.12.02.10.02.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 02 Dec 2019 10:02:39 -0800 (PST) From: Omar Sandoval To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , x86@kernel.org Cc: linux-kernel@vger.kernel.org Subject: [PATCH] x86: define arch_crash_save_vmcoreinfo() if CONFIG_CRASH_CORE=y Date: Mon, 2 Dec 2019 10:02:29 -0800 Message-Id: <9e9eb78c157d26d80f8781f8ce0e088fd12120b4.1575309711.git.osandov@fb.com> X-Mailer: git-send-email 2.24.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Omar Sandoval kernel/crash_core.c calls arch_crash_save_vmcoreinfo() to get arch-specific bits for vmcoreinfo. If it is not defined, then it has a no-op fallback. kernel/crash_core.c is gated behind CONFIG_CRASH_CORE. However, x86 defines arch_crash_save_vmcoreinfo() in arch/x86/kernel/machine_kexec_*.c, which is gated behind CONFIG_KEXEC_CORE. So, a kernel with CONFIG_CRASH_CORE=y and CONFIG_KEXEC_CORE=n uses the fallback and gets incomplete vmcoreinfo data, which can confuse applications reading vmcoreinfo from /proc/kcore. 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. Signed-off-by: Omar Sandoval --- Based on Linus's tree. arch/x86/kernel/Makefile | 1 + arch/x86/kernel/crash_core_32.c | 17 +++++++++++++++++ arch/x86/kernel/crash_core_64.c | 24 ++++++++++++++++++++++++ arch/x86/kernel/machine_kexec_32.c | 12 ------------ arch/x86/kernel/machine_kexec_64.c | 19 ------------------- 5 files changed, 42 insertions(+), 31 deletions(-) create mode 100644 arch/x86/kernel/crash_core_32.c create mode 100644 arch/x86/kernel/crash_core_64.c diff --git a/arch/x86/kernel/Makefile b/arch/x86/kernel/Makefile index 6175e370ee4a..9b294c13809a 100644 --- a/arch/x86/kernel/Makefile +++ b/arch/x86/kernel/Makefile @@ -94,6 +94,7 @@ obj-$(CONFIG_FUNCTION_TRACER) += ftrace_$(BITS).o obj-$(CONFIG_FUNCTION_GRAPH_TRACER) += ftrace.o obj-$(CONFIG_FTRACE_SYSCALLS) += ftrace.o obj-$(CONFIG_X86_TSC) += trace_clock.o +obj-$(CONFIG_CRASH_CORE) += crash_core_$(BITS).o obj-$(CONFIG_KEXEC_CORE) += machine_kexec_$(BITS).o obj-$(CONFIG_KEXEC_CORE) += relocate_kernel_$(BITS).o crash.o obj-$(CONFIG_KEXEC_FILE) += kexec-bzimage64.o diff --git a/arch/x86/kernel/crash_core_32.c b/arch/x86/kernel/crash_core_32.c new file mode 100644 index 000000000000..c0159a7bca6d --- /dev/null +++ b/arch/x86/kernel/crash_core_32.c @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include + +#include +#include + +void arch_crash_save_vmcoreinfo(void) +{ +#ifdef CONFIG_NUMA + VMCOREINFO_SYMBOL(node_data); + VMCOREINFO_LENGTH(node_data, MAX_NUMNODES); +#endif +#ifdef CONFIG_X86_PAE + VMCOREINFO_CONFIG(X86_PAE); +#endif +} diff --git a/arch/x86/kernel/crash_core_64.c b/arch/x86/kernel/crash_core_64.c new file mode 100644 index 000000000000..845a57eb4eb7 --- /dev/null +++ b/arch/x86/kernel/crash_core_64.c @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include + +#include +#include + +void arch_crash_save_vmcoreinfo(void) +{ + u64 sme_mask = sme_me_mask; + + VMCOREINFO_NUMBER(phys_base); + VMCOREINFO_SYMBOL(init_top_pgt); + vmcoreinfo_append_str("NUMBER(pgtable_l5_enabled)=%d\n", + pgtable_l5_enabled()); + +#ifdef CONFIG_NUMA + VMCOREINFO_SYMBOL(node_data); + VMCOREINFO_LENGTH(node_data, MAX_NUMNODES); +#endif + vmcoreinfo_append_str("KERNELOFFSET=%lx\n", kaslr_offset()); + VMCOREINFO_NUMBER(KERNEL_IMAGE_SIZE); + VMCOREINFO_NUMBER(sme_mask); +} diff --git a/arch/x86/kernel/machine_kexec_32.c b/arch/x86/kernel/machine_kexec_32.c index 7b45e8daad22..02bddfc122a4 100644 --- a/arch/x86/kernel/machine_kexec_32.c +++ b/arch/x86/kernel/machine_kexec_32.c @@ -250,15 +250,3 @@ void machine_kexec(struct kimage *image) __ftrace_enabled_restore(save_ftrace_enabled); } - -void arch_crash_save_vmcoreinfo(void) -{ -#ifdef CONFIG_NUMA - VMCOREINFO_SYMBOL(node_data); - VMCOREINFO_LENGTH(node_data, MAX_NUMNODES); -#endif -#ifdef CONFIG_X86_PAE - VMCOREINFO_CONFIG(X86_PAE); -#endif -} - diff --git a/arch/x86/kernel/machine_kexec_64.c b/arch/x86/kernel/machine_kexec_64.c index 16e125a50b33..ad5cdd6a5f23 100644 --- a/arch/x86/kernel/machine_kexec_64.c +++ b/arch/x86/kernel/machine_kexec_64.c @@ -398,25 +398,6 @@ void machine_kexec(struct kimage *image) __ftrace_enabled_restore(save_ftrace_enabled); } -void arch_crash_save_vmcoreinfo(void) -{ - u64 sme_mask = sme_me_mask; - - VMCOREINFO_NUMBER(phys_base); - VMCOREINFO_SYMBOL(init_top_pgt); - vmcoreinfo_append_str("NUMBER(pgtable_l5_enabled)=%d\n", - pgtable_l5_enabled()); - -#ifdef CONFIG_NUMA - VMCOREINFO_SYMBOL(node_data); - VMCOREINFO_LENGTH(node_data, MAX_NUMNODES); -#endif - vmcoreinfo_append_str("KERNELOFFSET=%lx\n", - kaslr_offset()); - VMCOREINFO_NUMBER(KERNEL_IMAGE_SIZE); - VMCOREINFO_NUMBER(sme_mask); -} - /* arch-dependent functionality related to kexec file-based syscall */ #ifdef CONFIG_KEXEC_FILE -- 2.24.0