内核内存问题调试全攻略
1. 内核内存缺陷检测工具对比
在调试内核内存问题时,我们使用了多种工具和技术,包括普通内核、编译器警告、KASAN 和 UBSAN 等。以下是对这些工具在检测常见内存缺陷方面的简要总结:
| 工具/缺陷类型 | 越界访问(OOB) | 未定义行为(UB) | 未初始化内存读取(UMR) | 使用后释放(UAF) | 使用后返回(UAR) | 内存泄漏 |
| — | — | — | — | — | — | — |
| KASAN | 能捕获全局、栈局部和动态(slab)内存的大部分 OOB 访问 | 不能捕获 | 不能捕获 | 能捕获 | 不能捕获 | 不能捕获 |
| UBSAN | 不能捕获动态 slab 内存的 OOB 访问 | 能捕获(大部分) | 不能捕获 | 未提及 | 不能捕获 | 未提及 |
| 编译器警告 | 未提及 | 未提及 | 能生成警告 | 未提及 | 能生成警告 | 能生成警告 |
| 静态分析器(cppcheck) | 未提及 | 未提及 | 能捕获一些 | 未提及 | 能捕获一些 | 未提及 |
| 内核 kmemleak 框架 | 未提及 | 未提及 | 未提及 | 未提及 | 未提及 | 能捕获通过 k{m|z}alloc()、vmalloc() 或 kmem_cache_alloc() 等接口分配的内存泄漏 |
从上述表格可以看出,不同工具在检测内存缺陷方面各有优劣。KASAN 在捕获 OOB 访问方面表现出色,而 UBSAN 则更擅长捕获未定义行为。编译器警告和静态分析器可以帮助我们发现一些潜在的问题,而内核 kmemleak 框架则专门用于检测内存泄漏。
超级会员免费看
订阅专栏 解锁全文

330

被折叠的 条评论
为什么被折叠?



