Clang CFI sanitizer与函数指针的不一致误报问题咨询
这是Clang的已知版本bug
- 你碰到的是Clang 11至15版本特有的兼容性问题,在Clang 18中已被修复。该bug仅在同时启用
-fsanitize=cfi和-fcf-protection=full编译选项时触发。 - 你的代码本身没有问题:无非法类型转换,且开启
-std=c89 -Wpedantic -Wall -Werror无任何警告,完全符合类型安全规范,排除了代码自身导致CFI报错的可能。 - 代码修改(添加static/const修饰、调整优化级别)会改变故障表现,原因在于旧版本Clang在LTO(链接时优化)流程中,对结构体数组内函数指针的CFI校验逻辑存在缺陷——不同的代码修饰和优化选项会影响编译器生成的中间表示,进而导致bug触发时机或位置变化。
内容的提问来源于stack exchange,提问作者Anon
相关产品推荐
相关产品推荐

