On Thu, Feb 2, 2023 at 11:53 AM Kees Cook <keescook@xxxxxxxxxxxx> wrote: > > On Thu, Feb 02, 2023 at 11:49:42AM -0800, Sami Tolvanen wrote: > > A quick look at Clang's source code suggests that Intrinsic::ubsantrap > > already accepts the handler ID (from the SanitizerHandler enum) as an > > argument and the arm64 LLVM back-end appears to encode the value as an > > immediate for the brk instruction. I didn't confirm that this actually > > works, but perhaps we just need to teach the kernel about the possible > > values? > > Oh excellent. Yeah, if that's all that's needed here that would be > great. What are the values? The arm64 brk immediate encoding seems to be "ubsantrap arg | 'U' << 8": https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/AArch64/AArch64InstrInfo.td#L7571 The argument values come from the SanitizerHandler enum, which is populated from this list: https://github.com/llvm/llvm-project/blob/main/clang/lib/CodeGen/CodeGenFunction.h#L113 Therefore, according to the tests, for ubsantrap(12) we'll get brk #0x550c, for example: https://github.com/llvm/llvm-project/blob/main/llvm/test/CodeGen/AArch64/ubsantrap.ll Sami