• Palmer Dabbelt's avatar
    Merge patch series "riscv: KCFI support" · 7f7d3ea6
    Palmer Dabbelt authored
    Sami Tolvanen <samitolvanen@google.com> says:
    
    This series adds KCFI support for RISC-V. KCFI is a fine-grained
    forward-edge control-flow integrity scheme supported in Clang >=16,
    which ensures indirect calls in instrumented code can only branch to
    functions whose type matches the function pointer type, thus making
    code reuse attacks more difficult.
    
    Patch 1 implements a pt_regs based syscall wrapper to address
    function pointer type mismatches in syscall handling. Patches 2 and 3
    annotate indirectly called assembly functions with CFI types. Patch 4
    implements error handling for indirect call checks. Patch 5 disables
    CFI for arch/riscv/purgatory. Patch 6 finally allows CONFIG_CFI_CLANG
    to be enabled for RISC-V.
    
    Note that Clang 16 has a generic architecture-agnostic KCFI
    implementation, which does work with the kernel, but doesn't produce
    a stable code sequence for indirect call checks, which means
    potential failures just trap and won't result in informative error
    messages. Clang 17 includes a RISC-V specific back-end implementation
    for KCFI, which emits a predictable code sequence for the checks and a
    .kcfi_traps section with locations of the traps, which patch 5 uses to
    produce more useful errors.
    
    The type mismatch fixes and annotations in the first three patches
    also become necessary in future if the kernel decides to support
    fine-grained CFI implemented using the hardware landing pad
    feature proposed in the in-progress Zicfisslp extension. Once the
    specification is ratified and hardware support emerges, implementing
    runtime patching support that replaces KCFI instrumentation with
    Zicfisslp landing pads might also be feasible (similarly to KCFI to
    FineIBT patching on x86_64), allowing distributions to ship a unified
    kernel binary for all devices.
    
    * b4-shazam-merge:
      riscv: Allow CONFIG_CFI_CLANG to be selected
      riscv/purgatory: Disable CFI
      riscv: Add CFI error handling
      riscv: Add ftrace_stub_graph
      riscv: Add types to indirectly called assembly functions
      riscv: Implement syscall wrappers
    
    Link: https://lore.kernel.org/r/20230710183544.999540-8-samitolvanen@google.comSigned-off-by: default avatarPalmer Dabbelt <palmer@rivosinc.com>
    7f7d3ea6
Kconfig 27.6 KB