主要观点:Linux 内核一直受意外算术溢出漏洞困扰,虽有改进但成效不佳,应系统地终结此问题。需考虑术语、根源、缓解、覆盖、语言和代码库等多方面因素,寻找合适解决方案。
关键信息:
- 术语上,“溢出”指溢出和下溢,即环绕,而非未定义行为。
- 根源是未检测到或未正确处理的环绕情况,C 语言语义易导致错误。
- 缓解措施要逐步过渡,避免破坏旧行为,采用允许列表方式确定预期环绕位置。
- 语言方面,C 无正式异常处理系统,缺乏明确算术意图,需创建新的环绕类型。
- 代码库中,有符号计算有意溢出少,无符号计算易导致环绕错误。
- 潜在解决方案有使用 sanitizers 和运算符重载,前者已存在部分工作,后者语义未明。
重要细节: - 过去十年平均每年约有 6 个主要整数溢出漏洞。
- GCC 和 Clang 已有处理整数溢出的 sanitizers,但需在编译器和 Linux 侧做工作。
- 最近的 C 标准提案中有“Operator Overloading Without Name Mangling”。
- 已存在可启动的概念验证,但未使用“wraps”属性。
- 讨论中多位开发者发表了观点和建议。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。