Merge tag 'powerpc-5.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc...
[sfrench/cifs-2.6.git] / arch / powerpc / kernel / security.c
index bd91dceb70105aa207d45fc4a86d3517ee804d18..bd70f5be1c27f4be878ea7057dcaba17edcacce3 100644 (file)
@@ -16,7 +16,7 @@
 #include <asm/setup.h>
 
 
-unsigned long powerpc_security_features __read_mostly = SEC_FTR_DEFAULT;
+u64 powerpc_security_features __read_mostly = SEC_FTR_DEFAULT;
 
 enum count_cache_flush_type {
        COUNT_CACHE_FLUSH_NONE  = 0x1,
@@ -95,13 +95,14 @@ static int barrier_nospec_get(void *data, u64 *val)
        return 0;
 }
 
-DEFINE_SIMPLE_ATTRIBUTE(fops_barrier_nospec,
-                       barrier_nospec_get, barrier_nospec_set, "%llu\n");
+DEFINE_DEBUGFS_ATTRIBUTE(fops_barrier_nospec, barrier_nospec_get,
+                        barrier_nospec_set, "%llu\n");
 
 static __init int barrier_nospec_debugfs_init(void)
 {
-       debugfs_create_file("barrier_nospec", 0600, powerpc_debugfs_root, NULL,
-                           &fops_barrier_nospec);
+       debugfs_create_file_unsafe("barrier_nospec", 0600,
+                                  powerpc_debugfs_root, NULL,
+                                  &fops_barrier_nospec);
        return 0;
 }
 device_initcall(barrier_nospec_debugfs_init);
@@ -109,7 +110,7 @@ device_initcall(barrier_nospec_debugfs_init);
 static __init int security_feature_debugfs_init(void)
 {
        debugfs_create_x64("security_features", 0400, powerpc_debugfs_root,
-                          (u64 *)&powerpc_security_features);
+                          &powerpc_security_features);
        return 0;
 }
 device_initcall(security_feature_debugfs_init);
@@ -142,32 +143,33 @@ ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, cha
 
        thread_priv = security_ftr_enabled(SEC_FTR_L1D_THREAD_PRIV);
 
-       if (rfi_flush || thread_priv) {
+       if (rfi_flush) {
                struct seq_buf s;
                seq_buf_init(&s, buf, PAGE_SIZE - 1);
 
-               seq_buf_printf(&s, "Mitigation: ");
-
-               if (rfi_flush)
-                       seq_buf_printf(&s, "RFI Flush");
-
-               if (rfi_flush && thread_priv)
-                       seq_buf_printf(&s, ", ");
-
+               seq_buf_printf(&s, "Mitigation: RFI Flush");
                if (thread_priv)
-                       seq_buf_printf(&s, "L1D private per thread");
+                       seq_buf_printf(&s, "L1D private per thread");
 
                seq_buf_printf(&s, "\n");
 
                return s.len;
        }
 
+       if (thread_priv)
+               return sprintf(buf, "Vulnerable: L1D private per thread\n");
+
        if (!security_ftr_enabled(SEC_FTR_L1D_FLUSH_HV) &&
            !security_ftr_enabled(SEC_FTR_L1D_FLUSH_PR))
                return sprintf(buf, "Not affected\n");
 
        return sprintf(buf, "Vulnerable\n");
 }
+
+ssize_t cpu_show_l1tf(struct device *dev, struct device_attribute *attr, char *buf)
+{
+       return cpu_show_meltdown(dev, attr, buf);
+}
 #endif
 
 ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, char *buf)
@@ -376,11 +378,13 @@ static int stf_barrier_get(void *data, u64 *val)
        return 0;
 }
 
-DEFINE_SIMPLE_ATTRIBUTE(fops_stf_barrier, stf_barrier_get, stf_barrier_set, "%llu\n");
+DEFINE_DEBUGFS_ATTRIBUTE(fops_stf_barrier, stf_barrier_get, stf_barrier_set,
+                        "%llu\n");
 
 static __init int stf_barrier_debugfs_init(void)
 {
-       debugfs_create_file("stf_barrier", 0600, powerpc_debugfs_root, NULL, &fops_stf_barrier);
+       debugfs_create_file_unsafe("stf_barrier", 0600, powerpc_debugfs_root,
+                                  NULL, &fops_stf_barrier);
        return 0;
 }
 device_initcall(stf_barrier_debugfs_init);
@@ -491,13 +495,14 @@ static int count_cache_flush_get(void *data, u64 *val)
        return 0;
 }
 
-DEFINE_SIMPLE_ATTRIBUTE(fops_count_cache_flush, count_cache_flush_get,
-                       count_cache_flush_set, "%llu\n");
+DEFINE_DEBUGFS_ATTRIBUTE(fops_count_cache_flush, count_cache_flush_get,
+                        count_cache_flush_set, "%llu\n");
 
 static __init int count_cache_flush_debugfs_init(void)
 {
-       debugfs_create_file("count_cache_flush", 0600, powerpc_debugfs_root,
-                           NULL, &fops_count_cache_flush);
+       debugfs_create_file_unsafe("count_cache_flush", 0600,
+                                  powerpc_debugfs_root, NULL,
+                                  &fops_count_cache_flush);
        return 0;
 }
 device_initcall(count_cache_flush_debugfs_init);