[PATCH v6 0/3] arm64: Expose FAR_EL1 tag bits in sigcontext
From: Peter Collingbourne <hidden>
Date: 2020-05-21 02:30:09
The kernel currently clears the tag bits (i.e. bits 56-63) in the fault address exposed via siginfo.si_addr and sigcontext.fault_address. However, the tag bits may be needed by tools in order to accurately diagnose memory errors, such as HWASan [1] or future tools based on the Memory Tagging Extension (MTE). We should not stop clearing these bits in the existing fault address fields, because there may be existing userspace applications that are expecting the tag bits to be cleared. Instead, create a fault_addr_top_byte_context in sigcontext (similar to the existing esr_context), and store the tag bits of FAR_EL1 there. [1] http://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html Peter Collingbourne (3): signal: Allow architectures to store arch-specific data in kernel_siginfo arm64: Move fault address and fault code into kernel_siginfo arm64: Expose FAR_EL1 tag bits in sigcontext Documentation/arm64/tagged-pointers.rst | 17 ++-- arch/arm64/include/asm/exception.h | 2 +- arch/arm64/include/asm/processor.h | 2 - arch/arm64/include/asm/signal.h | 19 ++++ arch/arm64/include/asm/traps.h | 8 +- arch/arm64/include/uapi/asm/sigcontext.h | 24 +++-- arch/arm64/kernel/debug-monitors.c | 4 +- arch/arm64/kernel/entry-common.c | 2 - arch/arm64/kernel/probes/uprobes.c | 18 ++-- arch/arm64/kernel/ptrace.c | 2 +- arch/arm64/kernel/signal.c | 42 ++++++-- arch/arm64/kernel/signal32.c | 15 ++- arch/arm64/kernel/sys_compat.c | 9 +- arch/arm64/kernel/traps.c | 121 +++++++++++++++++++---- arch/arm64/mm/fault.c | 111 ++++++--------------- include/linux/signal.h | 2 - include/linux/signal_types.h | 3 + kernel/signal.c | 17 +++- 18 files changed, 259 insertions(+), 159 deletions(-) create mode 100644 arch/arm64/include/asm/signal.h -- 2.26.2.761.g0e0b3e54be-goog _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel