lkml.org 
[lkml]   [2018]   [Jan]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 093/118] sysfs/cpu: Add vulnerability folder
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Thomas Gleixner <tglx@linutronix.de>

    commit 87590ce6e373d1a5401f6539f0c59ef92dd924a9 upstream.

    As the meltdown/spectre problem affects several CPU architectures, it makes
    sense to have common way to express whether a system is affected by a
    particular vulnerability or not. If affected the way to express the
    mitigation should be common as well.

    Create /sys/devices/system/cpu/vulnerabilities folder and files for
    meltdown, spectre_v1 and spectre_v2.

    Allow architectures to override the show function.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Linus Torvalds <torvalds@linuxfoundation.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: David Woodhouse <dwmw@amazon.co.uk>
    Link: https://lkml.kernel.org/r/20180107214913.096657732@linutronix.de
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    Documentation/ABI/testing/sysfs-devices-system-cpu | 16 +++++++
    drivers/base/Kconfig | 3 +
    drivers/base/cpu.c | 48 +++++++++++++++++++++
    include/linux/cpu.h | 7 +++
    4 files changed, 74 insertions(+)

    --- a/Documentation/ABI/testing/sysfs-devices-system-cpu
    +++ b/Documentation/ABI/testing/sysfs-devices-system-cpu
    @@ -373,3 +373,19 @@ Contact: Linux kernel mailing list <linu
    Description: information about CPUs heterogeneity.

    cpu_capacity: capacity of cpu#.
    +
    +What: /sys/devices/system/cpu/vulnerabilities
    + /sys/devices/system/cpu/vulnerabilities/meltdown
    + /sys/devices/system/cpu/vulnerabilities/spectre_v1
    + /sys/devices/system/cpu/vulnerabilities/spectre_v2
    +Date: Januar 2018
    +Contact: Linux kernel mailing list <linux-kernel@vger.kernel.org>
    +Description: Information about CPU vulnerabilities
    +
    + The files are named after the code names of CPU
    + vulnerabilities. The output of those files reflects the
    + state of the CPUs in the system. Possible output values:
    +
    + "Not affected" CPU is not affected by the vulnerability
    + "Vulnerable" CPU is affected and no mitigation in effect
    + "Mitigation: $M" CPU is affetcted and mitigation $M is in effect
    --- a/drivers/base/Kconfig
    +++ b/drivers/base/Kconfig
    @@ -236,6 +236,9 @@ config GENERIC_CPU_DEVICES
    config GENERIC_CPU_AUTOPROBE
    bool

    +config GENERIC_CPU_VULNERABILITIES
    + bool
    +
    config SOC_BUS
    bool
    select GLOB
    --- a/drivers/base/cpu.c
    +++ b/drivers/base/cpu.c
    @@ -501,10 +501,58 @@ static void __init cpu_dev_register_gene
    #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();
    }
    --- a/include/linux/cpu.h
    +++ b/include/linux/cpu.h
    @@ -47,6 +47,13 @@ extern void cpu_remove_dev_attr(struct d
    extern int cpu_add_dev_attr_group(struct attribute_group *attrs);
    extern void cpu_remove_dev_attr_group(struct attribute_group *attrs);

    +extern ssize_t cpu_show_meltdown(struct device *dev,
    + struct device_attribute *attr, char *buf);
    +extern ssize_t cpu_show_spectre_v1(struct device *dev,
    + struct device_attribute *attr, char *buf);
    +extern ssize_t cpu_show_spectre_v2(struct device *dev,
    + struct device_attribute *attr, char *buf);
    +
    extern __printf(4, 5)
    struct device *cpu_device_create(struct device *parent, void *drvdata,
    const struct attribute_group **groups,

    \
     
     \ /
      Last update: 2018-01-15 14:04    [W:4.142 / U:0.324 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site