128 lines
4.6 KiB
Diff
128 lines
4.6 KiB
Diff
From dc5e8f6e2934df2c4a459c932d123843d0c2375d Mon Sep 17 00:00:00 2001
|
|
From: Thomas Gleixner <tglx@linutronix.de>
|
|
Date: Mon, 18 Feb 2019 22:51:43 +0100
|
|
Subject: [PATCH 14/30] x86/speculation/mds: Add sysfs reporting for MDS
|
|
|
|
commit 8a4b06d391b0a42a373808979b5028f5c84d9c6a upstream
|
|
|
|
Add the sysfs reporting file for MDS. It exposes the vulnerability and
|
|
mitigation state similar to the existing files for the other speculative
|
|
hardware vulnerabilities.
|
|
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Reviewed-by: Borislav Petkov <bp@suse.de>
|
|
Reviewed-by: Jon Masters <jcm@redhat.com>
|
|
Tested-by: Jon Masters <jcm@redhat.com>
|
|
---
|
|
.../ABI/testing/sysfs-devices-system-cpu | 1 +
|
|
arch/x86/kernel/cpu/bugs.c | 25 +++++++++++++++++++
|
|
drivers/base/cpu.c | 8 ++++++
|
|
include/linux/cpu.h | 2 ++
|
|
4 files changed, 36 insertions(+)
|
|
|
|
diff --git a/Documentation/ABI/testing/sysfs-devices-system-cpu b/Documentation/ABI/testing/sysfs-devices-system-cpu
|
|
index 73318225a368..02b7bb711214 100644
|
|
--- a/Documentation/ABI/testing/sysfs-devices-system-cpu
|
|
+++ b/Documentation/ABI/testing/sysfs-devices-system-cpu
|
|
@@ -477,6 +477,7 @@ What: /sys/devices/system/cpu/vulnerabilities
|
|
/sys/devices/system/cpu/vulnerabilities/spectre_v2
|
|
/sys/devices/system/cpu/vulnerabilities/spec_store_bypass
|
|
/sys/devices/system/cpu/vulnerabilities/l1tf
|
|
+ /sys/devices/system/cpu/vulnerabilities/mds
|
|
Date: January 2018
|
|
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
|
Description: Information about CPU vulnerabilities
|
|
diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c
|
|
index 413a672f03a3..50b7d2a980e8 100644
|
|
--- a/arch/x86/kernel/cpu/bugs.c
|
|
+++ b/arch/x86/kernel/cpu/bugs.c
|
|
@@ -1154,6 +1154,22 @@ static ssize_t l1tf_show_state(char *buf)
|
|
}
|
|
#endif
|
|
|
|
+static ssize_t mds_show_state(char *buf)
|
|
+{
|
|
+ if (!hypervisor_is_type(X86_HYPER_NATIVE)) {
|
|
+ return sprintf(buf, "%s; SMT Host state unknown\n",
|
|
+ mds_strings[mds_mitigation]);
|
|
+ }
|
|
+
|
|
+ if (boot_cpu_has(X86_BUG_MSBDS_ONLY)) {
|
|
+ return sprintf(buf, "%s; SMT %s\n", mds_strings[mds_mitigation],
|
|
+ sched_smt_active() ? "mitigated" : "disabled");
|
|
+ }
|
|
+
|
|
+ return sprintf(buf, "%s; SMT %s\n", mds_strings[mds_mitigation],
|
|
+ sched_smt_active() ? "vulnerable" : "disabled");
|
|
+}
|
|
+
|
|
static char *stibp_state(void)
|
|
{
|
|
if (spectre_v2_enabled == SPECTRE_V2_IBRS_ENHANCED)
|
|
@@ -1218,6 +1234,10 @@ static ssize_t cpu_show_common(struct device *dev, struct device_attribute *attr
|
|
if (boot_cpu_has(X86_FEATURE_L1TF_PTEINV))
|
|
return l1tf_show_state(buf);
|
|
break;
|
|
+
|
|
+ case X86_BUG_MDS:
|
|
+ return mds_show_state(buf);
|
|
+
|
|
default:
|
|
break;
|
|
}
|
|
@@ -1249,4 +1269,9 @@ ssize_t cpu_show_l1tf(struct device *dev, struct device_attribute *attr, char *b
|
|
{
|
|
return cpu_show_common(dev, attr, buf, X86_BUG_L1TF);
|
|
}
|
|
+
|
|
+ssize_t cpu_show_mds(struct device *dev, struct device_attribute *attr, char *buf)
|
|
+{
|
|
+ return cpu_show_common(dev, attr, buf, X86_BUG_MDS);
|
|
+}
|
|
#endif
|
|
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c
|
|
index eb9443d5bae1..2fd6ca1021c2 100644
|
|
--- a/drivers/base/cpu.c
|
|
+++ b/drivers/base/cpu.c
|
|
@@ -546,11 +546,18 @@ ssize_t __weak cpu_show_l1tf(struct device *dev,
|
|
return sprintf(buf, "Not affected\n");
|
|
}
|
|
|
|
+ssize_t __weak cpu_show_mds(struct device *dev,
|
|
+ struct device_attribute *attr, char *buf)
|
|
+{
|
|
+ return sprintf(buf, "Not affected\n");
|
|
+}
|
|
+
|
|
static DEVICE_ATTR(meltdown, 0444, cpu_show_meltdown, NULL);
|
|
static DEVICE_ATTR(spectre_v1, 0444, cpu_show_spectre_v1, NULL);
|
|
static DEVICE_ATTR(spectre_v2, 0444, cpu_show_spectre_v2, NULL);
|
|
static DEVICE_ATTR(spec_store_bypass, 0444, cpu_show_spec_store_bypass, NULL);
|
|
static DEVICE_ATTR(l1tf, 0444, cpu_show_l1tf, NULL);
|
|
+static DEVICE_ATTR(mds, 0444, cpu_show_mds, NULL);
|
|
|
|
static struct attribute *cpu_root_vulnerabilities_attrs[] = {
|
|
&dev_attr_meltdown.attr,
|
|
@@ -558,6 +565,7 @@ static struct attribute *cpu_root_vulnerabilities_attrs[] = {
|
|
&dev_attr_spectre_v2.attr,
|
|
&dev_attr_spec_store_bypass.attr,
|
|
&dev_attr_l1tf.attr,
|
|
+ &dev_attr_mds.attr,
|
|
NULL
|
|
};
|
|
|
|
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
|
|
index 5041357d0297..3c87ad888ed3 100644
|
|
--- a/include/linux/cpu.h
|
|
+++ b/include/linux/cpu.h
|
|
@@ -57,6 +57,8 @@ extern ssize_t cpu_show_spec_store_bypass(struct device *dev,
|
|
struct device_attribute *attr, char *buf);
|
|
extern ssize_t cpu_show_l1tf(struct device *dev,
|
|
struct device_attribute *attr, char *buf);
|
|
+extern ssize_t cpu_show_mds(struct device *dev,
|
|
+ struct device_attribute *attr, char *buf);
|
|
|
|
extern __printf(4, 5)
|
|
struct device *cpu_device_create(struct device *parent, void *drvdata,
|