Stackleak vs noinstr (Was: [GIT pull] objtool/core for v5.16-rc1)

From: Peter Zijlstra
Date: Tue Nov 02 2021 - 05:06:05 EST


On Tue, Nov 02, 2021 at 09:00:36AM +0100, Peter Zijlstra wrote:
> On Mon, Nov 01, 2021 at 01:44:39PM -0700, Linus Torvalds wrote:

> > do_machine_check()+0x27: call to stackleak_track_stack ...
> > do_syscall_64()+0x9: call to stackleak_track_stack ...
> > do_int80_syscall_32()+0x9: call to stackleak_track_stack ...
> > exc_general_protection()+0x22: call to stackleak_track_stack ...
> > fixup_bad_iret()+0x20: call to stackleak_track_stack ...
> > .entry.text+0x10e6: call to stackleak_erase ...
> > .entry.text+0x143: call to stackleak_erase ...
> > .entry.text+0x17d9: call to stackleak_erase ...
> >
> > most seem to be about the stackleak thing,
>
> Right, I recently ran into this and hacen't yet had time to look into
> it. I suspect my normal build box doesn't have the GCC plugin crud
> enabled or somesuch.
>
> I think the GCC stackleak plugin needs fixing, specifically it needs a
> function attribute such that it will not emit instrumentation in noinstr
> functions. I'll go chase down the developer of that thing.

Alexander, is there any way to make this plugin grow a function
attribute which we can add to noinstr ? There's a strict requirement the
compiler doesn't add extra code to noinstr functions these days.

We'll 'soon' be running noinstr C code before switching to kernel page
tables even.