]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
x86/bugs: Concentrate bug reporting into a separate function
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Sat, 12 May 2018 01:56:31 +0000 (21:56 -0400)
committerBrian Maly <brian.maly@oracle.com>
Mon, 21 May 2018 22:02:09 +0000 (18:02 -0400)
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 <bp@suse.de>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
(cherry picked from commit d1059518b4789cabe34bb4b714d07e6089c82ca1)
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Reviewed-by: Mihai Carabas <mihai.carabas@oracle.com>
 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 <brian.maly@oracle.com>
arch/x86/kernel/cpu/bugs_64.c

index bd49860741eaa623bf58d77f51cccb1ef1db501b..8f7aef4fa946e78a3137c2802d1624dfb049fbd4 100644 (file)
@@ -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