ARM64 PAC 相关场景与代码流程

代码所在地 功能代码 arch/arm64/kernel/pointer_auth.c arch/arm64/include/asm/pointer_auth.h arch/arm64/include/asm/asm_pointer_auth.h(这个容易漏掉!) 测试代码 tools/testing/selftests/arm64/pauth/*,用户态测试 TEST(corrupt_pac):测试篡改带 PAC 的 LR 是否会导致验签失败从而令用户态进程收到信号 TEST(pac_instructions_not_nop{,_generic}):测试 pac* …

ARMv8.3 的 PAC 特性

名词释义: PAC: Pointer Authentication Code PA: Pointer Authentication SCTLR: System ConTroL Register 该特性为指针值提供【签名】和【校验】的能力。ARM64 硬件上提供 5 个秘钥,分别用于为三种地址生成 PAC: 代码地址:API{A,B}Key 数据地址:APD{A,B}Key 通用地址:APGAKey PAC 的值是关于以下三者的函数:1、指针本身;2、上下文相关值(也称 Modifier)1;3、秘钥。 生成后,PAC 会被附在指针值上(即“签在上面”),其所处的位置和长度与当前处理器:1)设置的虚拟地址长度以及;2) …