lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Tue, 30 Apr 2019 20:32:21 +0000 From: "Ghannam, Yazen" <Yazen.Ghannam@....com> To: "linux-edac@...r.kernel.org" <linux-edac@...r.kernel.org> CC: "Ghannam, Yazen" <Yazen.Ghannam@....com>, "linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>, "bp@...e.de" <bp@...e.de>, "tony.luck@...el.com" <tony.luck@...el.com>, "x86@...nel.org" <x86@...nel.org> Subject: [PATCH v3 6/6] x86/MCE: Treat MCE bank as initialized if control bits set in hardware From: Yazen Ghannam <yazen.ghannam@....com> The OS is expected to write all bits to MCA_CTL for each bank. However, some banks may be unused in which case the registers for such banks are Read-as-Zero/Writes-Ignored. Also, the OS may not write any control bits because of quirks, etc. A bank can be considered uninitialized if the MCA_CTL register returns zero. This is because either the OS did not write anything or because the hardware is enforcing RAZ/WI for the bank. Set a bank's init value based on if the control bits are set or not in hardware. Return an error code in the sysfs interface for uninitialized banks. Signed-off-by: Yazen Ghannam <yazen.ghannam@....com> --- Link: https://lkml.kernel.org/r/20190411201743.43195-7-Yazen.Ghannam@amd.com v2->v3: * No change. v1->v2: * New in v2. * Based on discussion from v1 patch 2. arch/x86/kernel/cpu/mce/core.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c index 551366c155ef..e59947e10ee0 100644 --- a/arch/x86/kernel/cpu/mce/core.c +++ b/arch/x86/kernel/cpu/mce/core.c @@ -1574,6 +1574,9 @@ static void __mcheck_cpu_init_clear_banks(void) /* Save bits set in hardware. */ rdmsrl(msr_ops.ctl(i), b->ctl); + + /* Bank is initialized if bits are set in hardware. */ + b->init = !!b->ctl; } } @@ -2098,6 +2101,9 @@ static ssize_t show_bank(struct device *s, struct device_attribute *attr, b = &per_cpu(mce_banks_percpu, s->id)[bank]; + if (!b->init) + return -ENODEV; + return sprintf(buf, "%llx\n", b->ctl); } @@ -2116,6 +2122,9 @@ static ssize_t set_bank(struct device *s, struct device_attribute *attr, b = &per_cpu(mce_banks_percpu, s->id)[bank]; + if (!b->init) + return -ENODEV; + b->ctl = new; mce_restart(); -- 2.17.1
Powered by blists - more mailing lists