From: Konrad Rzeszutek Wilk Date: Sat, 12 May 2018 01:56:31 +0000 (-0400) Subject: x86/bugs: Concentrate bug reporting into a separate function X-Git-Tag: v4.1.12-124.31.3~782 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=b1342b1b3866ccdbdcf97c05916bddb81e2ef076;p=users%2Fjedix%2Flinux-maple.git x86/bugs: Concentrate bug reporting into a separate function Those SysFS functions have a similar preamble, as such make common code to handle them. OraBug: 28041771 CVE: CVE-2018-3639 Suggested-by: Borislav Petkov Signed-off-by: Konrad Rzeszutek Wilk Signed-off-by: Thomas Gleixner Reviewed-by: Borislav Petkov Reviewed-by: Ingo Molnar (cherry picked from commit d1059518b4789cabe34bb4b714d07e6089c82ca1) Signed-off-by: Konrad Rzeszutek Wilk Reviewed-by: Mihai Carabas Conflicts: arch/x86/kernel/cpu/bugs.c [As it does not exist in UEK4. It is called bugs_64.c] Signed-off-by: Brian Maly --- diff --git a/arch/x86/kernel/cpu/bugs_64.c b/arch/x86/kernel/cpu/bugs_64.c index bd49860741eaa..8f7aef4fa946e 100644 --- a/arch/x86/kernel/cpu/bugs_64.c +++ b/arch/x86/kernel/cpu/bugs_64.c @@ -507,33 +507,52 @@ out: #undef pr_fmt #ifdef CONFIG_SYSFS -ssize_t cpu_show_meltdown(struct device *dev, - struct device_attribute *attr, char *buf) +ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr, + char *buf, unsigned int bug) { - if (!boot_cpu_has_bug(X86_BUG_CPU_MELTDOWN)) + if (!boot_cpu_has_bug(bug)) return sprintf(buf, "Not affected\n"); - if (boot_cpu_has(X86_FEATURE_PTI)) - return sprintf(buf, "Mitigation: PTI\n"); + + switch (bug) { + case X86_BUG_CPU_MELTDOWN: + if (boot_cpu_has(X86_FEATURE_PTI)) + return sprintf(buf, "Mitigation: PTI\n"); + + break; + + case X86_BUG_SPECTRE_V1: + /* At the moment, a single hard-wired mitigation */ + return sprintf(buf, "Mitigation: lfence\n"); + + case X86_BUG_SPECTRE_V2: + return sprintf(buf, "%s%s%s%s\n", spectre_v2_strings[spectre_v2_enabled], + ibrs_inuse && retpoline_enabled() ? ", IBRS" : "", + ibrs_firmware ? ", IBRS_FW" : "", + ibpb_inuse ? ", IBPB" : ""); + + default: + break; + } + return sprintf(buf, "Vulnerable\n"); } +ssize_t cpu_show_meltdown(struct device *dev, + struct device_attribute *attr, char *buf) +{ + return cpu_show_common(dev, attr, buf, X86_BUG_CPU_MELTDOWN); +} + ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, char *buf) { - if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V1)) - return sprintf(buf, "Not affected\n"); - /* At the moment, a single hard-wired mitigation */ - return sprintf(buf, "Mitigation: lfence\n"); + return cpu_show_common(dev, attr, buf, X86_BUG_SPECTRE_V1); + } ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, char *buf) { - if (!boot_cpu_has_bug(X86_BUG_SPECTRE_V2)) - return sprintf(buf, "Not affected\n"); - - return sprintf(buf, "%s%s%s\n", spectre_v2_strings[spectre_v2_enabled], - ibrs_firmware ? ", IBRS_FW" : "", - ibpb_inuse ? ", IBPB" : ""); + return cpu_show_common(dev, attr, buf, X86_BUG_SPECTRE_V2); } #endif