From: Kees Cook <keescook@chromium.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Thomas Gleixner <tglx@linutronix.de>,
Josh Poimboeuf <jpoimboe@redhat.com>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
the arch/x86 maintainers <x86@kernel.org>,
Alexander Popov <alex.popov@linux.com>
Subject: Re: Stackleak vs noinstr (Was: [GIT pull] objtool/core for v5.16-rc1)
Date: Tue, 1 Feb 2022 15:59:39 -0800 [thread overview]
Message-ID: <202202011558.DAAF17D@keescook> (raw)
In-Reply-To: <YYENAKB0igNFnFmK@hirez.programming.kicks-ass.net>
On Tue, Nov 02, 2021 at 11:03:44AM +0100, Peter Zijlstra wrote:
> On Tue, Nov 02, 2021 at 10:05:50AM +0100, Peter Zijlstra wrote:
> > 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.
>
> Using my pre-release GCC-12 compiler (the only one I have with plugin
> crud enabled apparently), the below seems to work.
>
> Having the plugin gate on section name seems a lot hacky, but given it's
> already doing that, one more doesn't hurt.
>
> ---
> diff --git a/kernel/stackleak.c b/kernel/stackleak.c
> index ce161a8e8d97..135866ca8878 100644
> --- a/kernel/stackleak.c
> +++ b/kernel/stackleak.c
> @@ -48,7 +48,7 @@ int stack_erasing_sysctl(struct ctl_table *table, int write,
> #define skip_erasing() false
> #endif /* CONFIG_STACKLEAK_RUNTIME_DISABLE */
>
> -asmlinkage void notrace stackleak_erase(void)
> +asmlinkage noinstr void stackleak_erase(void)
> {
> /* It would be nice not to have 'kstack_ptr' and 'boundary' on stack */
> unsigned long kstack_ptr = current->lowest_stack;
> @@ -102,7 +102,6 @@ asmlinkage void notrace stackleak_erase(void)
> /* Reset the 'lowest_stack' value for the next syscall */
> current->lowest_stack = current_top_of_stack() - THREAD_SIZE/64;
> }
> -NOKPROBE_SYMBOL(stackleak_erase);
>
> void __used __no_caller_saved_registers notrace stackleak_track_stack(void)
> {
> diff --git a/scripts/gcc-plugins/stackleak_plugin.c b/scripts/gcc-plugins/stackleak_plugin.c
> index e9db7dcb3e5f..07688a1c686b 100644
> --- a/scripts/gcc-plugins/stackleak_plugin.c
> +++ b/scripts/gcc-plugins/stackleak_plugin.c
> @@ -446,6 +446,8 @@ static bool stackleak_gate(void)
> return false;
> if (!strncmp(TREE_STRING_POINTER(section), ".meminit.text", 13))
> return false;
> + if (!strncmp(TREE_STRING_POINTER(section), ".noinstr.text", 13))
> + return false;
> }
>
> return track_frame_size >= 0;
Did this ever turn into a real patch? I don't see anything in -next for
it, so I assume it's still needed.
--
Kees Cook
next prev parent reply other threads:[~2022-02-01 23:59 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-11-01 1:15 [GIT pull] irq/core for v5.16-rc1 Thomas Gleixner
2021-11-01 1:15 ` [GIT pull] locking/core " Thomas Gleixner
2021-11-01 21:20 ` pr-tracker-bot
2021-11-01 1:16 ` [GIT pull] objtool/core " Thomas Gleixner
2021-11-01 20:44 ` Linus Torvalds
2021-11-02 8:00 ` Peter Zijlstra
2021-11-02 8:06 ` Borislav Petkov
2021-11-02 9:05 ` Stackleak vs noinstr (Was: [GIT pull] objtool/core for v5.16-rc1) Peter Zijlstra
2021-11-02 10:03 ` Peter Zijlstra
2021-11-02 17:50 ` Linus Torvalds
2021-11-02 21:18 ` Borislav Petkov
2021-11-03 7:18 ` Alexander Popov
2021-11-03 8:19 ` Peter Zijlstra
2022-02-01 23:59 ` Kees Cook [this message]
2021-11-01 21:20 ` [GIT pull] objtool/core for v5.16-rc1 pr-tracker-bot
2021-11-01 1:16 ` [GIT pull] perf/core " Thomas Gleixner
2021-11-01 21:20 ` pr-tracker-bot
2021-11-01 1:16 ` [GIT pull] sched/core " Thomas Gleixner
2021-11-01 21:01 ` Linus Torvalds
2021-11-01 21:27 ` Linus Torvalds
2021-11-02 8:41 ` Peter Zijlstra
2021-11-03 13:52 ` Mark Rutland
2021-11-03 16:23 ` Linus Torvalds
2021-11-02 8:54 ` Peter Zijlstra
2021-11-01 21:20 ` pr-tracker-bot
2021-11-01 1:16 ` [GIT pull] timers/core " Thomas Gleixner
2021-11-01 21:20 ` pr-tracker-bot
2021-11-01 1:16 ` [GIT pull] x86/apic " Thomas Gleixner
2021-11-01 21:20 ` pr-tracker-bot
2021-11-01 1:52 ` [GIT pull RESEND] x86/fpu " Thomas Gleixner
2021-11-01 21:20 ` pr-tracker-bot
2021-11-01 21:19 ` [GIT pull] irq/core " pr-tracker-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202202011558.DAAF17D@keescook \
--to=keescook@chromium.org \
--cc=alex.popov@linux.com \
--cc=jpoimboe@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.