|
Borislav Petkov |
b3703f |
From: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
|
|
Borislav Petkov |
b3703f |
Date: Thu, 19 May 2022 20:32:13 -0700
|
|
Borislav Petkov |
b3703f |
Subject: x86/speculation/mmio: Add sysfs reporting for Processor MMIO Stale Data
|
|
Borislav Petkov |
b3703f |
Git-commit: 8d50cdf8b8341770bc6367bce40c0c1bb0e1d5b3
|
|
Borislav Petkov |
b3703f |
Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git
|
|
Borislav Petkov |
b3703f |
Patch-mainline: Queued in tip for v5.19
|
|
Borislav Petkov |
b3703f |
References: bsc#1199650 CVE-2022-21166 CVE-2022-21127 CVE-2022-21123 CVE-2022-21125 CVE-2022-21180
|
|
Borislav Petkov |
b3703f |
|
|
Borislav Petkov |
b3703f |
Add the sysfs reporting file for Processor MMIO Stale Data
|
|
Borislav Petkov |
b3703f |
vulnerability. It exposes the vulnerability and mitigation state similar
|
|
Borislav Petkov |
b3703f |
to the existing files for the other hardware vulnerabilities.
|
|
Borislav Petkov |
b3703f |
|
|
Borislav Petkov |
b3703f |
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
|
|
Borislav Petkov |
b3703f |
Signed-off-by: Borislav Petkov <bp@suse.de>
|
|
Borislav Petkov |
b3703f |
---
|
|
Borislav Petkov |
b3703f |
Documentation/ABI/testing/sysfs-devices-system-cpu | 1
|
|
Borislav Petkov |
b3703f |
arch/x86/kernel/cpu/bugs.c | 22 +++++++++++++++++++++
|
|
Borislav Petkov |
b3703f |
drivers/base/cpu.c | 8 +++++++
|
|
Borislav Petkov |
b3703f |
include/linux/cpu.h | 3 ++
|
|
Borislav Petkov |
b3703f |
4 files changed, 34 insertions(+)
|
|
Borislav Petkov |
b3703f |
|
|
Borislav Petkov |
b3703f |
--- a/arch/x86/kernel/cpu/bugs.c
|
|
Borislav Petkov |
b3703f |
+++ b/arch/x86/kernel/cpu/bugs.c
|
|
Borislav Petkov |
b3703f |
@@ -1828,6 +1828,20 @@ static ssize_t tsx_async_abort_show_stat
|
|
Borislav Petkov |
b3703f |
sched_smt_active() ? "vulnerable" : "disabled");
|
|
Borislav Petkov |
b3703f |
}
|
|
Borislav Petkov |
b3703f |
|
|
Borislav Petkov |
b3703f |
+static ssize_t mmio_stale_data_show_state(char *buf)
|
|
Borislav Petkov |
b3703f |
+{
|
|
Borislav Petkov |
b3703f |
+ if (mmio_mitigation == MMIO_MITIGATION_OFF)
|
|
Borislav Petkov |
b3703f |
+ return sprintf(buf, "%s\n", mmio_strings[mmio_mitigation]);
|
|
Borislav Petkov |
b3703f |
+
|
|
Borislav Petkov |
b3703f |
+ if (boot_cpu_has(X86_FEATURE_HYPERVISOR)) {
|
|
Borislav Petkov |
b3703f |
+ return sprintf(buf, "%s; SMT Host state unknown\n",
|
|
Borislav Petkov |
b3703f |
+ mmio_strings[mmio_mitigation]);
|
|
Borislav Petkov |
b3703f |
+ }
|
|
Borislav Petkov |
b3703f |
+
|
|
Borislav Petkov |
b3703f |
+ return sprintf(buf, "%s; SMT %s\n", mmio_strings[mmio_mitigation],
|
|
Borislav Petkov |
b3703f |
+ sched_smt_active() ? "vulnerable" : "disabled");
|
|
Borislav Petkov |
b3703f |
+}
|
|
Borislav Petkov |
b3703f |
+
|
|
Borislav Petkov |
b3703f |
static char *stibp_state(void)
|
|
Borislav Petkov |
b3703f |
{
|
|
Borislav Petkov |
b3703f |
if (spectre_v2_in_eibrs_mode(spectre_v2_enabled))
|
|
Borislav Petkov |
b3703f |
@@ -1928,6 +1942,9 @@ static ssize_t cpu_show_common(struct de
|
|
Borislav Petkov |
b3703f |
case X86_BUG_SRBDS:
|
|
Borislav Petkov |
b3703f |
return srbds_show_state(buf);
|
|
Borislav Petkov |
b3703f |
|
|
Borislav Petkov |
b3703f |
+ case X86_BUG_MMIO_STALE_DATA:
|
|
Borislav Petkov |
b3703f |
+ return mmio_stale_data_show_state(buf);
|
|
Borislav Petkov |
b3703f |
+
|
|
Borislav Petkov |
b3703f |
default:
|
|
Borislav Petkov |
b3703f |
break;
|
|
Borislav Petkov |
b3703f |
}
|
|
Borislav Petkov |
b3703f |
@@ -1979,4 +1996,9 @@ ssize_t cpu_show_srbds(struct device *de
|
|
Borislav Petkov |
b3703f |
{
|
|
Borislav Petkov |
b3703f |
return cpu_show_common(dev, attr, buf, X86_BUG_SRBDS);
|
|
Borislav Petkov |
b3703f |
}
|
|
Borislav Petkov |
b3703f |
+
|
|
Borislav Petkov |
b3703f |
+ssize_t cpu_show_mmio_stale_data(struct device *dev, struct device_attribute *attr, char *buf)
|
|
Borislav Petkov |
b3703f |
+{
|
|
Borislav Petkov |
b3703f |
+ return cpu_show_common(dev, attr, buf, X86_BUG_MMIO_STALE_DATA);
|
|
Borislav Petkov |
b3703f |
+}
|
|
Borislav Petkov |
b3703f |
#endif
|
|
Borislav Petkov |
b3703f |
--- a/Documentation/ABI/testing/sysfs-devices-system-cpu
|
|
Borislav Petkov |
b3703f |
+++ b/Documentation/ABI/testing/sysfs-devices-system-cpu
|
|
Borislav Petkov |
b3703f |
@@ -495,6 +495,7 @@ What: /sys/devices/system/cpu/vulnerabi
|
|
Borislav Petkov |
b3703f |
/sys/devices/system/cpu/vulnerabilities/srbds
|
|
Borislav Petkov |
b3703f |
/sys/devices/system/cpu/vulnerabilities/tsx_async_abort
|
|
Borislav Petkov |
b3703f |
/sys/devices/system/cpu/vulnerabilities/itlb_multihit
|
|
Borislav Petkov |
b3703f |
+ /sys/devices/system/cpu/vulnerabilities/mmio_stale_data
|
|
Borislav Petkov |
b3703f |
Date: January 2018
|
|
Borislav Petkov |
b3703f |
Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
|
|
Borislav Petkov |
b3703f |
Description: Information about CPU vulnerabilities
|
|
Borislav Petkov |
b3703f |
--- a/drivers/base/cpu.c
|
|
Borislav Petkov |
b3703f |
+++ b/drivers/base/cpu.c
|
|
Borislav Petkov |
b3703f |
@@ -573,6 +573,12 @@ ssize_t __weak cpu_show_srbds(struct dev
|
|
Borislav Petkov |
b3703f |
return sprintf(buf, "Not affected\n");
|
|
Borislav Petkov |
b3703f |
}
|
|
Borislav Petkov |
b3703f |
|
|
Borislav Petkov |
b3703f |
+ssize_t __weak cpu_show_mmio_stale_data(struct device *dev,
|
|
Borislav Petkov |
b3703f |
+ struct device_attribute *attr, char *buf)
|
|
Borislav Petkov |
b3703f |
+{
|
|
Borislav Petkov |
b3703f |
+ return sprintf(buf, "Not affected\n");
|
|
Borislav Petkov |
b3703f |
+}
|
|
Borislav Petkov |
b3703f |
+
|
|
Borislav Petkov |
b3703f |
static DEVICE_ATTR(meltdown, 0444, cpu_show_meltdown, NULL);
|
|
Borislav Petkov |
b3703f |
static DEVICE_ATTR(spectre_v1, 0444, cpu_show_spectre_v1, NULL);
|
|
Borislav Petkov |
b3703f |
static DEVICE_ATTR(spectre_v2, 0444, cpu_show_spectre_v2, NULL);
|
|
Borislav Petkov |
b3703f |
@@ -582,6 +588,7 @@ static DEVICE_ATTR(mds, 0444, cpu_show_m
|
|
Borislav Petkov |
b3703f |
static DEVICE_ATTR(tsx_async_abort, 0444, cpu_show_tsx_async_abort, NULL);
|
|
Borislav Petkov |
b3703f |
static DEVICE_ATTR(itlb_multihit, 0444, cpu_show_itlb_multihit, NULL);
|
|
Borislav Petkov |
b3703f |
static DEVICE_ATTR(srbds, 0444, cpu_show_srbds, NULL);
|
|
Borislav Petkov |
b3703f |
+static DEVICE_ATTR(mmio_stale_data, 0444, cpu_show_mmio_stale_data, NULL);
|
|
Borislav Petkov |
b3703f |
|
|
Borislav Petkov |
b3703f |
static struct attribute *cpu_root_vulnerabilities_attrs[] = {
|
|
Borislav Petkov |
b3703f |
&dev_attr_meltdown.attr,
|
|
Borislav Petkov |
b3703f |
@@ -593,6 +600,7 @@ static struct attribute *cpu_root_vulner
|
|
Borislav Petkov |
b3703f |
&dev_attr_tsx_async_abort.attr,
|
|
Borislav Petkov |
b3703f |
&dev_attr_itlb_multihit.attr,
|
|
Borislav Petkov |
b3703f |
&dev_attr_srbds.attr,
|
|
Borislav Petkov |
b3703f |
+ &dev_attr_mmio_stale_data.attr,
|
|
Borislav Petkov |
b3703f |
NULL
|
|
Borislav Petkov |
b3703f |
};
|
|
Borislav Petkov |
b3703f |
|
|
Borislav Petkov |
b3703f |
--- a/include/linux/cpu.h
|
|
Borislav Petkov |
b3703f |
+++ b/include/linux/cpu.h
|
|
Borislav Petkov |
b3703f |
@@ -64,6 +64,9 @@ extern ssize_t cpu_show_tsx_async_abort(
|
|
Borislav Petkov |
b3703f |
char *buf);
|
|
Borislav Petkov |
b3703f |
extern ssize_t cpu_show_itlb_multihit(struct device *dev,
|
|
Borislav Petkov |
b3703f |
struct device_attribute *attr, char *buf);
|
|
Borislav Petkov |
b3703f |
+extern ssize_t cpu_show_mmio_stale_data(struct device *dev,
|
|
Borislav Petkov |
b3703f |
+ struct device_attribute *attr,
|
|
Borislav Petkov |
b3703f |
+ char *buf);
|
|
Borislav Petkov |
b3703f |
|
|
Borislav Petkov |
b3703f |
extern __printf(4, 5)
|
|
Borislav Petkov |
b3703f |
struct device *cpu_device_create(struct device *parent, void *drvdata,
|