mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-13 22:14:20 +08:00
dceec3ff78
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). Expose these bits via the arch_untagged_si_addr mechanism, so that they are only exposed to signal handlers with the SA_EXPOSE_TAGBITS flag set. [1] http://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html Signed-off-by: Peter Collingbourne <pcc@google.com> Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> Link: https://linux-review.googlesource.com/id/Ia8876bad8c798e0a32df7c2ce1256c4771c81446 Link: https://lore.kernel.org/r/0010296597784267472fa13b39f8238d87a72cf8.1605904350.git.pcc@google.com Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
26 lines
650 B
C
26 lines
650 B
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __ARM64_ASM_SIGNAL_H
|
|
#define __ARM64_ASM_SIGNAL_H
|
|
|
|
#include <asm/memory.h>
|
|
#include <uapi/asm/signal.h>
|
|
#include <uapi/asm/siginfo.h>
|
|
|
|
static inline void __user *arch_untagged_si_addr(void __user *addr,
|
|
unsigned long sig,
|
|
unsigned long si_code)
|
|
{
|
|
/*
|
|
* For historical reasons, all bits of the fault address are exposed as
|
|
* address bits for watchpoint exceptions. New architectures should
|
|
* handle the tag bits consistently.
|
|
*/
|
|
if (sig == SIGTRAP && si_code == TRAP_BRKPT)
|
|
return addr;
|
|
|
|
return untagged_addr(addr);
|
|
}
|
|
#define arch_untagged_si_addr arch_untagged_si_addr
|
|
|
|
#endif
|