From: Peter Zijlstra <peterz@infradead.org>
To: Josh Poimboeuf <jpoimboe@redhat.com>
Cc: torvalds@linux-foundation.org, tglx@linutronix.de, hpa@zytor.com,
julien.thierry@arm.com, will.deacon@arm.com, luto@amacapital.net,
mingo@kernel.org, catalin.marinas@arm.com, james.morse@arm.com,
valentin.schneider@arm.com, brgerst@gmail.com, luto@kernel.org,
bp@alien8.de, dvlasenk@redhat.com, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 4/6] objtool: Replace STACK_FRAME_NON_STANDARD annotation
Date: Mon, 25 Feb 2019 17:17:22 +0100 [thread overview]
Message-ID: <20190225161722.GN32477@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20190225161124.cq6c45r3wlwktyuz@treble>
On Mon, Feb 25, 2019 at 10:11:24AM -0600, Josh Poimboeuf wrote:
> On Mon, Feb 25, 2019 at 01:43:34PM +0100, Peter Zijlstra wrote:
> > Replace the existing STACK_FRAME_NON_STANDARD annotation with a
> > 'better' scheme.
> >
> > The old annotation works by taking the address of a function; this
> > is visible to the compiler and might affect code generation (the
> > function pointer escapes). The new annotation simply stores the
> > function name and has objtool do a symtab lookup.
> >
> > Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
> > ---
> > include/linux/frame.h | 19 +++++++++++++---
> > tools/objtool/check.c | 58 +++++++++++++++++++++-----------------------------
> > tools/objtool/check.h | 1
> > 3 files changed, 41 insertions(+), 37 deletions(-)
> >
> > --- a/include/linux/frame.h
> > +++ b/include/linux/frame.h
> > @@ -11,9 +11,22 @@
> > *
> > * For more information, see tools/objtool/Documentation/stack-validation.txt.
> > */
> > -#define STACK_FRAME_NON_STANDARD(func) \
> > - static void __used __section(.discard.func_stack_frame_non_standard) \
> > - *__func_stack_frame_non_standard_##func = func
> > +#define STACK_FRAME_NON_STANDARD(func) \
> > + asm (".pushsection .discard.nonstd_frame_strtab, \"S\", @3\n\t" \
> > + "999: .ascii \"" #func "\"\n\t" \
> > + " .byte 0\n\t" \
> > + ".popsection\n\t" \
> > + ".pushsection .discard.nonstd_frame\n\t" \
> > + ".long 999b - .\n\t" \
> > + ".popsection\n\t")
> > +
>
> I don't think this will work in the case where GCC does an IPA
> optimization and renames the function (e.g., renames func to
> func.isra.1234), right? That might be a deal breaker...
*groan*... indeed :/ So back to the old scheme then? Andy, any other
clever ideas?
> > +/*
> > + * SHT_STRTAB(@3) sections should start with a \0 byte such that the 0 offset
> > + * encodes the NULL string.
> > + */
> > +asm (".pushsection .discard.nonstd_frame_strtab, \"S\", @3\n\t"
> > + ".byte 0\n\t"
> > + ".popsection\n\t");
>
> Including the file creates the section, which is a bit nasty. Instead
> just change STACK_FRAME_NON_STANDARD to prefix every string with a \0?
That would get us \0\0 between every string, which I suppose is in-spec,
but weird. I figured that since it is a .discard. section, getting it
wasn't a problem.
next prev parent reply other threads:[~2019-02-25 16:17 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-02-25 12:43 [PATCH 0/6] objtool: UACCESS validation Peter Zijlstra
2019-02-25 12:43 ` [PATCH 1/6] x86/uaccess: Dont evaluate argument inside AC region Peter Zijlstra
2019-02-25 15:43 ` Andy Lutomirski
2019-02-25 16:02 ` Peter Zijlstra
2019-02-25 16:36 ` Borislav Petkov
2019-02-25 16:50 ` Andy Lutomirski
2019-02-25 19:09 ` Linus Torvalds
2019-02-25 19:18 ` Borislav Petkov
2019-02-25 18:10 ` [tip:x86/urgent] x86/uaccess: Don't leak the AC flag into __put_user() value evaluation tip-bot for Andy Lutomirski
2019-02-25 19:46 ` tip-bot for Andy Lutomirski
2019-02-25 12:43 ` [PATCH 2/6] x86/ia32: Fix ia32_restore_sigcontext AC leak Peter Zijlstra
2019-02-25 15:41 ` Andy Lutomirski
2019-02-25 16:10 ` Peter Zijlstra
2019-02-25 16:29 ` Andy Lutomirski
2019-02-25 16:37 ` Peter Zijlstra
2019-02-25 16:41 ` Peter Zijlstra
2019-02-25 16:49 ` Andy Lutomirski
2019-02-25 12:43 ` [PATCH 3/6] objtool: Set insn->func for alternatives Peter Zijlstra
2019-02-25 12:43 ` [PATCH 4/6] objtool: Replace STACK_FRAME_NON_STANDARD annotation Peter Zijlstra
2019-02-25 16:11 ` Josh Poimboeuf
2019-02-25 16:17 ` Peter Zijlstra [this message]
2019-02-25 16:23 ` Josh Poimboeuf
2019-02-27 12:20 ` Peter Zijlstra
2019-02-28 0:30 ` Andy Lutomirski
2019-02-25 12:43 ` [PATCH 5/6] objtool: Add UACCESS validation Peter Zijlstra
2019-02-25 15:53 ` Andy Lutomirski
2019-02-25 16:12 ` Peter Zijlstra
2019-02-25 17:15 ` Peter Zijlstra
2019-02-25 17:34 ` Linus Torvalds
2019-02-25 17:38 ` Josh Poimboeuf
2019-02-27 14:08 ` Peter Zijlstra
2019-02-27 14:17 ` Andrey Ryabinin
2019-02-27 14:26 ` Peter Zijlstra
2019-02-27 14:33 ` Peter Zijlstra
2019-02-27 15:40 ` Dmitry Vyukov
2019-02-27 17:28 ` Peter Zijlstra
2019-02-28 9:40 ` Peter Zijlstra
2019-02-28 9:59 ` Dmitry Vyukov
2019-02-28 10:05 ` Dmitry Vyukov
2019-02-28 10:52 ` Peter Zijlstra
2019-02-27 16:18 ` Linus Torvalds
2019-02-27 17:30 ` Peter Zijlstra
2019-02-27 17:36 ` Linus Torvalds
2019-02-25 12:43 ` [PATCH 6/6] objtool: Add Direction Flag validation Peter Zijlstra
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=20190225161722.GN32477@hirez.programming.kicks-ass.net \
--to=peterz@infradead.org \
--cc=bp@alien8.de \
--cc=brgerst@gmail.com \
--cc=catalin.marinas@arm.com \
--cc=dvlasenk@redhat.com \
--cc=hpa@zytor.com \
--cc=james.morse@arm.com \
--cc=jpoimboe@redhat.com \
--cc=julien.thierry@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=luto@kernel.org \
--cc=mingo@kernel.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=valentin.schneider@arm.com \
--cc=will.deacon@arm.com \
/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.