Commit 42b25558 authored by Mauricio Faria de Oliveira's avatar Mauricio Faria de Oliveira Committed by Juerg Haefliger

powerpc/rfi-flush: Differentiate enabled and patched flush types

CVE-2018-3639 (powerpc)

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: default avatarMichael Ellerman <mpe@ellerman.id.au>
Signed-off-by: default avatarMauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
(cherry picked from commit 0063d61c)
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Signed-off-by: default avatarJuerg Haefliger <juergh@canonical.com>
parent e40c0175
...@@ -919,15 +919,15 @@ static void init_fallback_flush(void) ...@@ -919,15 +919,15 @@ static void init_fallback_flush(void)
void setup_rfi_flush(enum l1d_flush_type types, bool enable) void setup_rfi_flush(enum l1d_flush_type types, bool enable)
{ {
if (types & L1D_FLUSH_FALLBACK) { if (types & L1D_FLUSH_FALLBACK) {
pr_info("rfi-flush: Using fallback displacement flush\n"); pr_info("rfi-flush: fallback displacement flush available\n");
init_fallback_flush(); init_fallback_flush();
} }
if (types & L1D_FLUSH_ORI) 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) 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; enabled_flush_types = types;
......
...@@ -151,7 +151,14 @@ void do_rfi_flush_fixups(enum l1d_flush_type types) ...@@ -151,7 +151,14 @@ void do_rfi_flush_fixups(enum l1d_flush_type types)
patch_instruction(dest + 2, instrs[2]); 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 */ #endif /* CONFIG_PPC_BOOK3S_64 */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment