diff options
Diffstat (limited to 'drivers/base/cpu.c')
| -rw-r--r-- | drivers/base/cpu.c | 48 | 
1 files changed, 48 insertions, 0 deletions
diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c index 58a9b608d821..d99038487a0d 100644 --- a/drivers/base/cpu.c +++ b/drivers/base/cpu.c @@ -511,10 +511,58 @@ static void __init cpu_dev_register_generic(void)  #endif  } +#ifdef CONFIG_GENERIC_CPU_VULNERABILITIES + +ssize_t __weak cpu_show_meltdown(struct device *dev, +				 struct device_attribute *attr, char *buf) +{ +	return sprintf(buf, "Not affected\n"); +} + +ssize_t __weak cpu_show_spectre_v1(struct device *dev, +				   struct device_attribute *attr, char *buf) +{ +	return sprintf(buf, "Not affected\n"); +} + +ssize_t __weak cpu_show_spectre_v2(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 struct attribute *cpu_root_vulnerabilities_attrs[] = { +	&dev_attr_meltdown.attr, +	&dev_attr_spectre_v1.attr, +	&dev_attr_spectre_v2.attr, +	NULL +}; + +static const struct attribute_group cpu_root_vulnerabilities_group = { +	.name  = "vulnerabilities", +	.attrs = cpu_root_vulnerabilities_attrs, +}; + +static void __init cpu_register_vulnerabilities(void) +{ +	if (sysfs_create_group(&cpu_subsys.dev_root->kobj, +			       &cpu_root_vulnerabilities_group)) +		pr_err("Unable to register CPU vulnerabilities\n"); +} + +#else +static inline void cpu_register_vulnerabilities(void) { } +#endif +  void __init cpu_dev_init(void)  {  	if (subsys_system_register(&cpu_subsys, cpu_root_attr_groups))  		panic("Failed to register CPU subsystem");  	cpu_dev_register_generic(); +	cpu_register_vulnerabilities();  }  | 
