• Alice Ryhl's avatar
    rust: support for shadow call stack sanitizer · d077242d
    Alice Ryhl authored
    Add all of the flags that are needed to support the shadow call stack
    (SCS) sanitizer with Rust, and updates Kconfig to allow only
    configurations that work.
    
    The -Zfixed-x18 flag is required to use SCS on arm64, and requires rustc
    version 1.80.0 or greater. This restriction is reflected in Kconfig.
    
    When CONFIG_DYNAMIC_SCS is enabled, the build will be configured to
    include unwind tables in the build artifacts. Dynamic SCS uses the
    unwind tables at boot to find all places that need to be patched. The
    -Cforce-unwind-tables=y flag ensures that unwind tables are available
    for Rust code.
    
    In non-dynamic mode, the -Zsanitizer=shadow-call-stack flag is what
    enables the SCS sanitizer. Using this flag requires rustc version 1.82.0
    or greater on the targets used by Rust in the kernel. This restriction
    is reflected in Kconfig.
    
    It is possible to avoid the requirement of rustc 1.80.0 by using
    -Ctarget-feature=+reserve-x18 instead of -Zfixed-x18. However, this flag
    emits a warning during the build, so this patch does not add support for
    using it and instead requires 1.80.0 or greater.
    
    The dependency is placed on `select HAVE_RUST` to avoid a situation
    where enabling Rust silently turns off the sanitizer. Instead, turning
    on the sanitizer results in Rust being disabled. We generally do not
    want changes to CONFIG_RUST to result in any mitigations being changed
    or turned off.
    
    At the time of writing, rustc 1.82.0 only exists via the nightly release
    channel. There is a chance that the -Zsanitizer=shadow-call-stack flag
    will end up needing 1.83.0 instead, but I think it is small.
    Reviewed-by: default avatarSami Tolvanen <samitolvanen@google.com>
    Reviewed-by: default avatarArd Biesheuvel <ardb@kernel.org>
    Reviewed-by: default avatarKees Cook <kees@kernel.org>
    Acked-by: default avatarWill Deacon <will@kernel.org>
    Signed-off-by: default avatarAlice Ryhl <aliceryhl@google.com>
    Link: https://lore.kernel.org/r/20240829-shadow-call-stack-v7-1-2f62a4432abf@google.com
    [ Fixed indentation using spaces. - Miguel ]
    Signed-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
    d077242d
Makefile 8.05 KB