All of lore.kernel.org
 help / color / mirror / Atom feed
From: Thomas Garnier <thgarnie@google.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Kate Stewart <kstewart@linuxfoundation.org>,
	Nicolas Pitre <nicolas.pitre@linaro.org>,
	the arch/x86 maintainers <x86@kernel.org>,
	Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>,
	Len Brown <len.brown@intel.com>,
	Tom Lendacky <thomas.lendacky@amd.com>,
	Peter Zijlstra <peterz@infradead.org>, Yonghong Song <yhs@fb.com>,
	Christopher Li <sparse@chrisli.org>,
	Dave Hansen <dave.hansen@linux.intel.com>,
	Dominik Brodowski <linux@dominikbrodowski.net>,
	LKML <linux-kernel@vger.kernel.org>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Jan Beulich <JBeulich@suse.com>, Pavel Machek <pavel@ucw.cz>,
	"H . Peter Anvin" <hpa@zytor.com>,
	Kernel Hardening <kernel-hardening@lists.openwall.com>,
	Christoph Lameter <cl@linux.com>,
	Alok Kataria <akataria@vmware.com>,
	Linux Doc Mailing List <linux-doc@vger.kernel.org>,
	linux-arch <linux-arch@vger.kernel.org>,
	Jonathan Corbet <corbet@l>
Subject: Re: [PATCH v3 21/27] x86/ftrace: Adapt function tracing for PIE support
Date: Tue, 29 May 2018 11:37:45 -0700	[thread overview]
Message-ID: <CAJcbSZEBW0mE7x1tOUr9y2BJUfodyjix0EjO=oE7A4M+mGvZ3g__45474.0796740682$1527619020$gmane$org@mail.gmail.com> (raw)
In-Reply-To: <CAJcbSZGQmQM7PuER0kEqt3aG9O-8vh-g1EA2jnkVsJPx-Htvrw@mail.gmail.com>

On Thu, May 24, 2018 at 1:41 PM Thomas Garnier <thgarnie@google.com> wrote:


> On Thu, May 24, 2018 at 1:16 PM Steven Rostedt <rostedt@goodmis.org>
wrote:

> > On Thu, 24 May 2018 13:40:24 +0200
> > Petr Mladek <pmladek@suse.com> wrote:

> > > On Wed 2018-05-23 12:54:15, Thomas Garnier wrote:
> > > > When using -fPIE/PIC with function tracing, the compiler generates a
> > > > call through the GOT (call *__fentry__@GOTPCREL). This instruction
> > > > takes 6 bytes instead of 5 on the usual relative call.
> > > >
> > > > If PIE is enabled, replace the 6th byte of the GOT call by a 1-byte
> nop
> > > > so ftrace can handle the previous 5-bytes as before.
> > > >
> > > > Position Independent Executable (PIE) support will allow to extended
> the
> > > > KASLR randomization range below the -2G memory limit.
> > > >
> > > > Signed-off-by: Thomas Garnier <thgarnie@google.com>
> > > > ---
> > > >  arch/x86/include/asm/ftrace.h   |  6 +++--
> > > >  arch/x86/include/asm/sections.h |  4 ++++
> > > >  arch/x86/kernel/ftrace.c        | 42
> +++++++++++++++++++++++++++++++--
> > > >  3 files changed, 48 insertions(+), 4 deletions(-)
> > > >
> > > > diff --git a/arch/x86/include/asm/ftrace.h
> b/arch/x86/include/asm/ftrace.h
> > > > index c18ed65287d5..8f2decce38d8 100644
> > > > --- a/arch/x86/include/asm/ftrace.h
> > > > +++ b/arch/x86/include/asm/ftrace.h
> > > > @@ -25,9 +25,11 @@ extern void __fentry__(void);
> > > >  static inline unsigned long ftrace_call_adjust(unsigned long addr)
> > > >  {
> > > >     /*
> > > > -    * addr is the address of the mcount call instruction.
> > > > -    * recordmcount does the necessary offset calculation.
> > > > +    * addr is the address of the mcount call instruction. PIE has
> always a
> > > > +    * byte added to the start of the function.
> > > >      */
> > > > +   if (IS_ENABLED(CONFIG_X86_PIE))
> > > > +           addr -= 1;
> > >
> > > This seems to modify the address even for modules that are _not_
> compiled with
> > > PIE, see below.

> > Can one load a module not compiled for PIE in a kernel with PIE?

> > >
> > > >     return addr;
> > > >  }
> > > >
> > > > diff --git a/arch/x86/kernel/ftrace.c b/arch/x86/kernel/ftrace.c
> > > > index 01ebcb6f263e..73b3c30cb7a3 100644
> > > > --- a/arch/x86/kernel/ftrace.c
> > > > +++ b/arch/x86/kernel/ftrace.c
> > > > @@ -135,6 +135,44 @@ ftrace_modify_code_direct(unsigned long ip,
> unsigned const char *old_code,
> > > >     return 0;
> > > >  }
> > > >
> > > > +/* Bytes before call GOT offset */
> > > > +const unsigned char got_call_preinsn[] = { 0xff, 0x15 };
> > > > +
> > > > +static int
> > > > +ftrace_modify_initial_code(unsigned long ip, unsigned const char
> *old_code,
> > > > +                      unsigned const char *new_code)
> > > > +{
> > > > +   unsigned char replaced[MCOUNT_INSN_SIZE + 1];
> > > > +
> > > > +   ftrace_expected = old_code;
> > > > +
> > > > +   /*
> > > > +    * If PIE is not enabled or no GOT call was found, default to
the
> > > > +    * original approach to code modification.
> > > > +    */
> > > > +   if (!IS_ENABLED(CONFIG_X86_PIE) ||
> > > > +       probe_kernel_read(replaced, (void *)ip, sizeof(replaced)) ||
> > > > +       memcmp(replaced, got_call_preinsn,
sizeof(got_call_preinsn)))
> > > > +           return ftrace_modify_code_direct(ip, old_code,
new_code);
> > >
> > > And this looks like an attempt to handle modules compiled without
> > > PIE. Does it works with the right ip in that case?

> > I'm guessing the || is for the "or no GOT call was found", but it
> > doesn't explain why no GOT would be found.

> Yes, maybe I could have made it work by using text_ip_addr earlier.


> > >
> > > I wonder if a better solution would be to update
> > > scripts/recordmcount.c to store the incremented location into the
> module.

> I will look into it.

Found a way to properly change the __mcount_loc using the preprocessing
(removing the need for -1 on the addr). It will be part of the next version.

Thanks for the feedback.



> > If recordmcount.c can handle this, then I think that's the preferred
> > approach. Thanks!

> > -- Steve

> > >
> > > IMPORTANT: I have only vague picture about how this all works. It is
> > > possible that I am completely wrong. The code might be correct,
> > > especially if you tested this situation.
> > >
> > > Best Regards,
> > > Petr



> --
> Thomas



-- 
Thomas

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

  parent reply	other threads:[~2018-05-29 18:37 UTC|newest]

Thread overview: 190+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-23 19:53 [PATCH v3 00/27] x86: PIE support and option to extend KASLR randomization Thomas Garnier via Virtualization
2018-05-23 19:53 ` Thomas Garnier
2018-05-23 19:53 ` Thomas Garnier via Virtualization
2018-05-23 19:53 ` [PATCH v3 01/27] x86/crypto: Adapt assembly for PIE support Thomas Garnier via Virtualization
2018-05-23 19:53   ` Thomas Garnier
2018-05-23 19:53   ` Thomas Garnier via Virtualization
2018-05-23 19:53 ` Thomas Garnier
2018-05-23 19:53 ` [PATCH v3 02/27] x86: Use symbol name on bug table " Thomas Garnier via Virtualization
2018-05-23 19:53   ` Thomas Garnier
2018-05-23 19:53   ` Thomas Garnier via Virtualization
2018-05-23 19:53 ` Thomas Garnier
2018-05-23 19:53 ` [PATCH v3 03/27] x86: Use symbol name in jump " Thomas Garnier
2018-05-23 19:53   ` Thomas Garnier
2018-05-23 19:53   ` Thomas Garnier
2018-05-23 19:53 ` Thomas Garnier via Virtualization
2018-05-23 19:53 ` [PATCH v3 04/27] x86: Add macro to get symbol address " Thomas Garnier
2018-05-23 19:53   ` Thomas Garnier
2018-05-23 19:53   ` Thomas Garnier
2018-05-23 19:53 ` Thomas Garnier via Virtualization
2018-05-23 19:53 ` [PATCH v3 05/27] x86: relocate_kernel - Adapt assembly " Thomas Garnier
2018-05-23 19:53   ` Thomas Garnier
2018-05-23 19:53   ` Thomas Garnier
2018-05-23 19:53 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 06/27] x86/entry/64: " Thomas Garnier via Virtualization
2018-05-23 19:54 ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` [PATCH v3 07/27] x86: pm-trace - " Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 08/27] x86/CPU: " Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 09/27] x86/acpi: " Thomas Garnier via Virtualization
2018-05-23 19:54 ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-24 11:03   ` Pavel Machek
2018-05-24 11:03     ` Pavel Machek
2018-05-24 16:35     ` Thomas Garnier
2018-05-24 16:35     ` Thomas Garnier via Virtualization
2018-05-24 16:35     ` Thomas Garnier
2018-05-24 16:35       ` Thomas Garnier
2018-05-24 16:35       ` Thomas Garnier
2018-05-25  9:14       ` Pavel Machek
2018-05-25  9:14         ` Pavel Machek
2018-05-25  9:14         ` Pavel Machek
2018-05-25 17:00         ` Thomas Garnier via Virtualization
2018-05-25 17:00         ` Thomas Garnier
2018-05-25 17:00           ` Thomas Garnier
2018-05-25 17:00           ` Thomas Garnier
2018-05-29 12:31           ` Pavel Machek
2018-05-29 12:31             ` Pavel Machek
2018-05-29 12:31             ` Pavel Machek
2018-05-29 15:55             ` Thomas Garnier
2018-05-29 15:55               ` Thomas Garnier
2018-05-29 15:55               ` Thomas Garnier
2018-05-29 15:55             ` Thomas Garnier
2018-05-29 15:55             ` Thomas Garnier via Virtualization
2018-05-29 12:31           ` Pavel Machek
2018-05-25 17:00         ` Thomas Garnier
2018-05-25  9:14       ` Pavel Machek
2018-05-25  9:14       ` Pavel Machek
2018-05-24 11:03   ` Pavel Machek
2018-05-24 11:03   ` Pavel Machek
2018-05-23 19:54 ` [PATCH v3 10/27] x86/boot/64: " Thomas Garnier via Virtualization
2018-05-23 19:54 ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` [PATCH v3 11/27] x86/power/64: " Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-24 11:03   ` Pavel Machek
2018-05-24 11:03   ` Pavel Machek
2018-05-24 11:03     ` Pavel Machek
2018-05-24 16:37     ` Thomas Garnier via Virtualization
2018-05-24 16:37       ` Thomas Garnier
2018-05-24 16:37       ` Thomas Garnier via Virtualization
2018-05-25  9:10       ` Pavel Machek
2018-05-25  9:10         ` Pavel Machek
2018-05-25  9:10         ` Pavel Machek
2018-05-25  9:10       ` Pavel Machek
2018-05-24 16:37     ` Thomas Garnier
2018-05-24 11:03   ` Pavel Machek
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 12/27] x86/paravirt: " Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 13/27] x86/boot/64: Build head64.c as mcmodel large when PIE is enabled Thomas Garnier via Virtualization
2018-05-23 19:54 ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` [PATCH v3 14/27] x86/percpu: Adapt percpu for PIE support Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 15/27] compiler: Option to default to hidden symbols Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 16/27] compiler: Option to add PROVIDE_HIDDEN replacement for weak symbols Thomas Garnier via Virtualization
2018-05-23 19:54 ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 21:16   ` Randy Dunlap
2018-05-23 21:16     ` Randy Dunlap
2018-05-23 21:16     ` Randy Dunlap
2018-05-23 21:16   ` Randy Dunlap
2018-05-23 21:16   ` Randy Dunlap
2018-05-23 19:54 ` [PATCH v3 17/27] x86/relocs: Handle PIE relocations Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 18/27] xen: Adapt assembly for PIE support Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-24  9:11   ` Juergen Gross
2018-05-24  9:11     ` Juergen Gross
2018-05-24  9:11     ` Juergen Gross
2018-05-24  9:11   ` Juergen Gross
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 19/27] kvm: " Thomas Garnier via Virtualization
2018-05-23 19:54 ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` [PATCH v3 20/27] x86: Support global stack cookie Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 21/27] x86/ftrace: Adapt function tracing for PIE support Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-24 11:40   ` Petr Mladek
2018-05-24 11:40     ` Petr Mladek
2018-05-24 11:40     ` Petr Mladek
2018-05-24 20:16     ` Steven Rostedt
2018-05-24 20:16       ` Steven Rostedt
2018-05-24 20:16       ` Steven Rostedt
2018-05-24 20:41       ` Thomas Garnier
2018-05-24 20:41       ` Thomas Garnier via Virtualization
2018-05-24 20:41         ` Thomas Garnier
2018-05-24 20:41         ` Thomas Garnier via Virtualization
2018-05-29 18:37         ` Thomas Garnier via Virtualization
2018-05-29 18:37           ` Thomas Garnier
2018-05-29 18:37           ` Thomas Garnier via Virtualization
2018-05-29 18:37         ` Thomas Garnier [this message]
2018-05-24 20:16     ` Steven Rostedt
2018-05-24 11:40   ` Petr Mladek
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 22/27] x86/modules: Add option to start module section after kernel Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 23/27] x86/modules: Adapt module loading for PIE support Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 21:26   ` Randy Dunlap
2018-05-23 21:26   ` Randy Dunlap
2018-05-23 21:26     ` Randy Dunlap
2018-05-23 21:26     ` Randy Dunlap
2018-05-23 22:01     ` Thomas Garnier
2018-05-23 22:01     ` Thomas Garnier
2018-05-23 22:01       ` Thomas Garnier
2018-05-23 22:01       ` Thomas Garnier
2018-05-23 23:07       ` Randy Dunlap
2018-05-23 23:07       ` Randy Dunlap
2018-05-23 23:07         ` Randy Dunlap
2018-05-23 23:07         ` Randy Dunlap
2018-05-23 23:07       ` Randy Dunlap
2018-05-23 22:01     ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 24/27] x86/mm: Make the x86 GOT read-only Thomas Garnier via Virtualization
2018-05-23 19:54 ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` [PATCH v3 25/27] x86/pie: Add option to build the kernel as PIE Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 26/27] x86/relocs: Add option to generate 64-bit relocations Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54 ` Thomas Garnier via Virtualization
2018-05-23 19:54 ` [PATCH v3 27/27] x86/kaslr: Add option to extend KASLR range from 1GB to 3GB Thomas Garnier via Virtualization
2018-05-23 19:54 ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier
2018-05-23 19:54   ` Thomas Garnier

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='CAJcbSZEBW0mE7x1tOUr9y2BJUfodyjix0EjO=oE7A4M+mGvZ3g__45474.0796740682$1527619020$gmane$org@mail.gmail.com' \
    --to=thgarnie@google.com \
    --cc=JBeulich@suse.com \
    --cc=akataria@vmware.com \
    --cc=cl@linux.com \
    --cc=corbet@l \
    --cc=dave.hansen@linux.intel.com \
    --cc=hpa@zytor.com \
    --cc=kernel-hardening@lists.openwall.com \
    --cc=kstewart@linuxfoundation.org \
    --cc=len.brown@intel.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@dominikbrodowski.net \
    --cc=nicolas.pitre@linaro.org \
    --cc=pavel@ucw.cz \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=sergey.senozhatsky.work@gmail.com \
    --cc=sparse@chrisli.org \
    --cc=thomas.lendacky@amd.com \
    --cc=x86@kernel.org \
    --cc=yamada.masahiro@socionext.com \
    --cc=yhs@fb.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.