Thread (28 messages) 28 messages, 5 authors, 2022-09-28

Re: [PATCH v5 00/22] KCFI support

From: Peter Zijlstra <peterz@infradead.org>
Date: 2022-09-26 14:27:42
Also in: linux-hardening, lkml, llvm

On Thu, Sep 08, 2022 at 02:54:42PM -0700, Sami Tolvanen wrote:
KCFI is a forward-edge control-flow integrity scheme in the upcoming
Clang 16 release, which is more suitable for kernel use than the
existing CFI scheme used by CONFIG_CFI_CLANG. KCFI doesn't require
LTO, doesn't alter function references to point to a jump table, and
won't break function address equality.

This series replaces the current arm64 CFI implementation with KCFI
and adds support for x86_64.

KCFI requires assembly functions that are indirectly called from C
code to be annotated with type identifiers. As type information is
only available in C, the compiler emits expected type identifiers
into the symbol table, so they can be referenced from assembly
without having to hardcode type hashes. Patch 6 adds helper macros
for annotating functions, and patches 9 and 20 add annotations.

In case of a type mismatch, KCFI always traps. To support error
handling, the compiler generates a .kcfi_traps section for x86_64,
which contains the locations of each trap, and for arm64, encodes
the necessary register information to the ESR. Patches 10 and 22 add
arch-specific error handlers.

To test this series, you'll need a ToT Clang toolchain. The series
is also available pn GitHub:

  https://github.com/samitolvanen/linux/commits/kcfi-v5
As mentioned at plumbers, my only concern is somewhat excessive use of
CFI_CLANG as oposed to something more compiler neutral. But I suppose
that's something we can cleanup/fix when GCC grows support for this.

Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Peter Zijlstra (Intel) <peterz@infradead.org>

(as in I ran kCFI + call-depth-tracking + FineIBT on a bunch of
hardware)

HJL, can you look at adding kCFI support to GCC ?

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help