]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
powerpc/rfi-flush: Differentiate enabled and patched flush types
authorMauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Wed, 14 Mar 2018 22:40:41 +0000 (19:40 -0300)
committerStefan Bader <stefan.bader@canonical.com>
Tue, 15 May 2018 05:35:31 +0000 (07:35 +0200)
Currently the rfi-flush messages print 'Using <type> flush' for all
enabled_flush_types, but that is not necessarily true -- as now the
fallback flush is always enabled on pseries, but the fixup function
overwrites its nop/branch slot with other flush types, if available.

So, replace the 'Using <type> flush' messages with '<type> flush is
available'.

Also, print the patched flush types in the fixup function, so users
can know what is (not) being used (e.g., the slower, fallback flush,
or no flush type at all if flush is disabled via the debugfs switch).

Suggested-by: Michael Ellerman <mpe@ellerman.id.au>
Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
[backport: setup_64.c: split hunks due to L1D_FLUSH_FALLBACK location]
Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
CVE-2018-3639 (powerpc)

Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
arch/powerpc/kernel/setup_64.c
arch/powerpc/lib/feature-fixups.c

index c0d40563aef7ad9721051cebf40cc4144d96779f..5dfd870a6427175813f0cacd24561a88386d7dac 100644 (file)
@@ -805,7 +805,7 @@ void __init setup_rfi_flush(enum l1d_flush_type types, bool enable)
                u64 l1d_size = ppc64_caches.l1d.size;
                u64 limit = min(safe_stack_limit(), ppc64_rma_size);
 
-               pr_info("rfi-flush: Using fallback displacement flush\n");
+               pr_info("rfi-flush: fallback displacement flush available\n");
 
                /*
                 * Align to L1d size, and size it at 2x L1d size, to
@@ -835,10 +835,10 @@ void __init setup_rfi_flush(enum l1d_flush_type types, bool enable)
        }
 
        if (types & L1D_FLUSH_ORI)
-               pr_info("rfi-flush: Using ori type flush\n");
+               pr_info("rfi-flush: ori type flush available\n");
 
        if (types & L1D_FLUSH_MTTRIG)
-               pr_info("rfi-flush: Using mttrig type flush\n");
+               pr_info("rfi-flush: mttrig type flush available\n");
 
        enabled_flush_types = types;
 
index a95ea007d654d5db2b78d811a4ef21a750a95609..acfc81e3aeb8970d964be8efb1de95ffee7bf18e 100644 (file)
@@ -153,7 +153,14 @@ void do_rfi_flush_fixups(enum l1d_flush_type types)
                patch_instruction(dest + 2, instrs[2]);
        }
 
-       printk(KERN_DEBUG "rfi-flush: patched %d locations\n", i);
+       printk(KERN_DEBUG "rfi-flush: patched %d locations (%s flush)\n", i,
+               (types == L1D_FLUSH_NONE)       ? "no" :
+               (types == L1D_FLUSH_FALLBACK)   ? "fallback displacement" :
+               (types &  L1D_FLUSH_ORI)        ? (types & L1D_FLUSH_MTTRIG)
+                                                       ? "ori+mttrig type"
+                                                       : "ori type" :
+               (types &  L1D_FLUSH_MTTRIG)     ? "mttrig type"
+                                               : "unknown");
 }
 #endif /* CONFIG_PPC_BOOK3S_64 */