Linux-ARM-Kernel Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/1] stackleak: Register the 'stackleak_cleanup' pass before the 'mach' pass
@ 2018-11-30 13:19 Alexander Popov
  2018-11-30 17:09 ` Kees Cook
  0 siblings, 1 reply; 6+ messages in thread
From: Alexander Popov @ 2018-11-30 13:19 UTC (permalink / raw)
  To: kernel-hardening, Kees Cook, Jann Horn, Andy Lutomirski,
	Borislav Petkov, Thomas Gleixner, Dave Hansen, Steven Rostedt,
	Peter Zijlstra, Masami Hiramatsu, Florian Weimer,
	Richard Sandiford, Segher Boessenkool, Alexander Monakov,
	Tycho Andersen, Laura Abbott, Mark Rutland, Emese Revfy,
	Thomas Garnier, Ingo Molnar, Will Deacon, Alexei Starovoitov,
	Ard Biesheuvel, H Peter Anvin, David S Miller, linux-arm-kernel,
	gcc, alex.popov, linux-kernel

Currently the 'stackleak_cleanup' pass deleting a CALL insn is executed
after the 'reload' pass. That allows gcc to do some weird optimization in
function prologues and epilogues, which are generated later [1].

Let's avoid that by registering the 'stackleak_cleanup' pass before
the 'mach' pass, which performs the machine dependent code transformations.
It's the moment when the stack frame size is final and function prologues
and epilogues are already generated.

[1] https://www.openwall.com/lists/kernel-hardening/2018/11/23/2

Reported-by: kbuild test robot <lkp@intel.com>
Signed-off-by: Alexander Popov <alex.popov@linux.com>
---
 scripts/gcc-plugins/stackleak_plugin.c | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/scripts/gcc-plugins/stackleak_plugin.c b/scripts/gcc-plugins/stackleak_plugin.c
index 2f48da9..6f41b32 100644
--- a/scripts/gcc-plugins/stackleak_plugin.c
+++ b/scripts/gcc-plugins/stackleak_plugin.c
@@ -363,10 +363,12 @@ __visible int plugin_init(struct plugin_name_args *plugin_info,
 						PASS_POS_INSERT_BEFORE);
 
 	/*
-	 * The stackleak_cleanup pass should be executed after the
-	 * "reload" pass, when the stack frame size is final.
+	 * The stackleak_cleanup pass should be executed before the "mach"
+	 * pass, which performs the machine dependent code transformations.
+	 * It's the moment when the stack frame size is already final and
+	 * function prologues and epilogues are generated.
 	 */
-	PASS_INFO(stackleak_cleanup, "reload", 1, PASS_POS_INSERT_AFTER);
+	PASS_INFO(stackleak_cleanup, "mach", 1, PASS_POS_INSERT_BEFORE);
 
 	if (!plugin_default_version_check(version, &gcc_version)) {
 		error(G_("incompatible gcc/plugin versions"));
-- 
2.7.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-12-06 15:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-11-30 13:19 [PATCH 1/1] stackleak: Register the 'stackleak_cleanup' pass before the 'mach' pass Alexander Popov
2018-11-30 17:09 ` Kees Cook
2018-11-30 17:12   ` Kees Cook
2018-11-30 22:01     ` Alexander Popov
2018-12-03 18:25     ` Alexander Popov
2018-12-06 15:10       ` Alexander Popov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox