All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Laight <David.Laight@ACULAB.COM>
To: 'Peter Zijlstra' <peterz@infradead.org>,
	Andy Lutomirski <luto@kernel.org>
Cc: Kees Cook <keescook@chromium.org>,
	Ard Biesheuvel <ardb@kernel.org>,
	"Sami Tolvanen" <samitolvanen@google.com>,
	Mark Rutland <mark.rutland@arm.com>,
	the arch/x86 maintainers <x86@kernel.org>,
	Josh Poimboeuf <jpoimboe@redhat.com>,
	Nathan Chancellor <nathan@kernel.org>,
	"Nick Desaulniers" <ndesaulniers@google.com>,
	Sedat Dilek <sedat.dilek@gmail.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	"linux-hardening@vger.kernel.org"
	<linux-hardening@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	"llvm@lists.linux.dev" <llvm@lists.linux.dev>
Subject: RE: [PATCH] static_call,x86: Robustify trampoline patching
Date: Wed, 3 Nov 2021 10:01:40 +0000	[thread overview]
Message-ID: <af7756b2244e47b7b7fae534236dac30@AcuMS.aculab.com> (raw)
In-Reply-To: <20211103083559.GB174703@worktop.programming.kicks-ass.net>

From: Peter Zijlstra
> Sent: 03 November 2021 08:36
> 
> On Tue, Nov 02, 2021 at 05:20:05PM -0700, Andy Lutomirski wrote:
> > I think that's a big mistake -- any sane ENDBR-using scheme would
> > really prefer that ENDBR to be right next to the actual function body,
> > and really any scheme would benefit due to better cache locality.
> 
> Agreed, IBT/BTI want the landing pad in front of the actual function.
> 
> > But, more importantly, IMO any sane ENDBR-using scheme wants to
> > generate the indirect stub as part of code gen for the actual
> > function.
> 
> Sorta, I really want to be able to not have a landing pad for functions
> whose address is never taken. At that point it doesn't matter if it gets
> generated along with the function and then stripped/poisoned later, or
> generated later.
> 
> As such, the landing pad should not be part of the function proper,
> direct calls should never observe it.
> 
> Less landing pads is more better.

One problem is when a direct call is 'too far' for a call instruction.
IIRC this can happen in arm64 with modules (all 64bit except x86?).
So an indirect call has to be used instead - which needs the landing pad.
Although it may actually be better to put a trampoline (landing pad
+ near jump) elsewhere and have the module loader do the correct fixup.
(Is the loader already generating a trampoline in the module code?)
The function body can then be cache-line aligned - with its benefits.

Can't anything that can write instructions always use a retpoline
to implement a jump indirect to an arbitrary address?
(Not to mention just generating the required code rather than a call.)

AFAICT CFI is all about detecting invalid values in function pointer tables.
It doesn't really protect in any way from JIT code doing incorrect things.

	David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)


  reply	other threads:[~2021-11-03 10:01 UTC|newest]

Thread overview: 117+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-13 18:16 [PATCH v5 00/15] x86: Add support for Clang CFI Sami Tolvanen
2021-10-13 18:16 ` [PATCH v5 01/15] objtool: Add CONFIG_CFI_CLANG support Sami Tolvanen
2021-10-13 18:59   ` Kees Cook
2021-10-14  0:44   ` Josh Poimboeuf
2021-10-14 10:22   ` Peter Zijlstra
2021-10-14 19:20     ` Sami Tolvanen
2021-10-13 18:16 ` [PATCH v5 02/15] objtool: Add ASM_STACK_FRAME_NON_STANDARD Sami Tolvanen
2021-10-13 18:59   ` Kees Cook
2021-10-13 18:16 ` [PATCH v5 03/15] linkage: Add DECLARE_NOT_CALLED_FROM_C Sami Tolvanen
2021-10-13 19:00   ` Kees Cook
2021-10-15  2:51   ` Andy Lutomirski
2021-10-15 15:35     ` Sami Tolvanen
2021-10-15 15:55     ` Thomas Gleixner
2021-10-15 16:22       ` Andy Lutomirski
2021-10-15 16:47         ` Sami Tolvanen
2021-10-15 17:34           ` Andy Lutomirski
2021-10-15 17:57       ` Thomas Gleixner
2021-10-15 18:42         ` Sami Tolvanen
2021-10-15 19:35           ` Andy Lutomirski
2021-10-15 20:37             ` Sami Tolvanen
2021-10-16 21:12               ` Josh Poimboeuf
2021-10-18 17:08                 ` Sami Tolvanen
2021-10-15 22:17           ` Thomas Gleixner
2021-10-16 21:16             ` Josh Poimboeuf
2021-10-13 18:16 ` [PATCH v5 04/15] cfi: Add DEFINE_CFI_IMMEDIATE_RETURN_STUB Sami Tolvanen
2021-10-13 19:02   ` Kees Cook
2021-10-13 18:16 ` [PATCH v5 05/15] tracepoint: Exclude tp_stub_func from CFI checking Sami Tolvanen
2021-10-13 19:03   ` Kees Cook
2021-10-13 19:20   ` Steven Rostedt
2021-10-13 18:16 ` [PATCH v5 06/15] ftrace: Use an opaque type for functions not callable from C Sami Tolvanen
2021-10-13 19:04   ` Kees Cook
2021-10-13 19:20   ` Steven Rostedt
2021-10-13 18:16 ` [PATCH v5 07/15] lkdtm: Disable UNSET_SMEP with CFI Sami Tolvanen
2021-10-13 18:16 ` [PATCH v5 08/15] lkdtm: Use an opaque type for lkdtm_rodata_do_nothing Sami Tolvanen
2021-10-13 18:16 ` [PATCH v5 09/15] x86: Use an opaque type for functions not callable from C Sami Tolvanen
2021-10-14 11:21   ` Borislav Petkov
2021-10-14 16:07     ` Kees Cook
2021-10-14 17:31       ` Borislav Petkov
2021-10-14 18:24         ` Sami Tolvanen
2021-10-14 19:00           ` Nick Desaulniers
2021-10-14 18:47         ` Kees Cook
2021-10-14 18:52           ` Steven Rostedt
2021-10-14 19:06             ` Josh Poimboeuf
2021-10-13 18:16 ` [PATCH v5 10/15] x86/purgatory: Disable CFI Sami Tolvanen
2021-10-13 19:05   ` Kees Cook
2021-10-13 18:16 ` [PATCH v5 11/15] x86, relocs: Ignore __typeid__ relocations Sami Tolvanen
2021-10-13 18:16 ` [PATCH v5 12/15] x86, module: " Sami Tolvanen
2021-10-13 18:55   ` Kees Cook
2021-10-13 18:16 ` [PATCH v5 13/15] x86, cpu: Use LTO for cpu.c with CFI Sami Tolvanen
2021-10-13 18:16 ` [PATCH v5 14/15] x86, kprobes: Fix optprobe_template_func type mismatch Sami Tolvanen
2021-10-13 18:16 ` [PATCH v5 15/15] x86, build: Allow CONFIG_CFI_CLANG to be selected Sami Tolvanen
2021-10-13 18:56   ` Kees Cook
2021-10-13 19:07 ` [PATCH v5 00/15] x86: Add support for Clang CFI Kees Cook
2021-10-19 10:06 ` Alexander Lobakin
2021-10-19 15:40   ` Sami Tolvanen
2021-10-21 10:27 ` Alexander Lobakin
2021-10-26 20:16 ` Peter Zijlstra
2021-10-27 10:02   ` David Laight
2021-10-27 10:17     ` Peter Zijlstra
2021-10-27 12:05   ` Mark Rutland
2021-10-27 12:22     ` Ard Biesheuvel
2021-10-27 12:48       ` Peter Zijlstra
2021-10-27 13:04         ` Peter Zijlstra
2021-10-27 13:30           ` Ard Biesheuvel
2021-10-27 14:03             ` Peter Zijlstra
2021-10-27 14:18               ` Ard Biesheuvel
2021-10-27 14:36                 ` Peter Zijlstra
2021-10-27 15:50                 ` Sami Tolvanen
2021-10-27 15:55                   ` Ard Biesheuvel
2021-10-29 20:03                   ` Peter Zijlstra
2021-10-30  7:47                     ` [PATCH] static_call,x86: Robustify trampoline patching Peter Zijlstra
2021-10-30  8:16                       ` Peter Zijlstra
2021-11-02 17:35                         ` Kees Cook
2021-11-02 18:15                           ` Peter Zijlstra
2021-11-15 13:09                         ` Rasmus Villemoes
2021-10-30 17:19                       ` Ard Biesheuvel
2021-10-30 18:02                         ` Peter Zijlstra
2021-10-30 18:55                           ` Ard Biesheuvel
2021-10-31 16:24                             ` Ard Biesheuvel
2021-10-31 16:39                               ` Peter Zijlstra
2021-10-31 16:44                                 ` Ard Biesheuvel
2021-10-31 20:09                                   ` Peter Zijlstra
2021-10-31 20:21                                     ` Ard Biesheuvel
2021-10-31 20:44                                       ` Peter Zijlstra
2021-10-31 23:36                                         ` Ard Biesheuvel
2021-11-01  9:01                                           ` Peter Zijlstra
2021-11-01  9:36                                             ` David Laight
2021-11-01 14:14                                             ` Ard Biesheuvel
2021-11-02 12:57                                               ` Peter Zijlstra
2021-11-02 15:15                                                 ` Peter Zijlstra
2021-11-02 17:44                                                   ` Ard Biesheuvel
2021-11-02 18:14                                                     ` Peter Zijlstra
2021-11-02 18:17                                                       ` Peter Zijlstra
2021-11-02 18:18                                                       ` Ard Biesheuvel
2021-11-02 21:48                                                         ` Peter Zijlstra
2021-11-02 18:10                                                 ` Kees Cook
2021-11-02 21:02                                                   ` Andy Lutomirski
2021-11-02 23:13                                                     ` Kees Cook
2021-11-03  0:20                                                       ` Andy Lutomirski
2021-11-03  8:35                                                         ` Peter Zijlstra
2021-11-03 10:01                                                           ` David Laight [this message]
2021-11-03 19:32                                                           ` Andy Lutomirski
2021-11-02 21:19                                                   ` Peter Zijlstra
2021-11-11 12:15                       ` [tip: locking/urgent] " tip-bot2 for Peter Zijlstra
2021-10-30 19:07                     ` [PATCH v5 00/15] x86: Add support for Clang CFI Sami Tolvanen
2021-10-27 17:11           ` Kees Cook
2021-10-27 21:21             ` Peter Zijlstra
2021-10-27 22:27               ` Kees Cook
2021-10-28 11:09                 ` Peter Zijlstra
2021-10-28 17:12                   ` Kees Cook
2021-10-28 20:29                     ` Peter Zijlstra
2021-11-02 17:26                       ` Kees Cook
2021-11-01  4:13                 ` Andy Lutomirski
2021-10-27 12:46     ` Peter Zijlstra
2021-10-27 12:55     ` David Laight
2021-10-27 13:17       ` Mark Rutland
2021-10-27 21:31         ` David Laight

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=af7756b2244e47b7b7fae534236dac30@AcuMS.aculab.com \
    --to=david.laight@aculab.com \
    --cc=ardb@kernel.org \
    --cc=jpoimboe@redhat.com \
    --cc=keescook@chromium.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=llvm@lists.linux.dev \
    --cc=luto@kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=nathan@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=samitolvanen@google.com \
    --cc=sedat.dilek@gmail.com \
    --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.