内核地址消毒剂(KASAN)

概述
KernelAddressSANitizer(KASAN)是动态内存错误检测器。它提供了一种快速而全面的解决方案,用于查找无用后使用和越界错误。

KASAN使用编译时工具来检查每个内存访问,因此您将需要GCC 4.9.2或更高版本。需要GCC 5.0或更高版本才能检测对堆栈或全局变量的越界访问。

当前,仅x86_64和arm64体系结构支持KASAN。

用法
要启用KASAN,请使用以下命令配置内核:

CONFIG_KASAN = y
并在CONFIG_KASAN_OUTLINE和CONFIG_KASAN_INLINE之间选择。Outline和inline是编译器检测类型。前者产生较小的二进制文件,而后者则快1.1-2倍。内联检测需要GCC 5.0或更高版本。

KASAN可与SLUB和SLAB内存分配器一起使用。为了更好地检测错误并更好地报告,请启用CONFIG_STACKTRACE。

要禁用对特定文件或目录的检测,请在相应的内核Makefile中添加类似于以下内容的行:

对于单个文件(例如main.o):

KASAN_SANITIZE_main.o:= n
对于一个目录中的所有文件:

KASAN_SANITIZE:= n
错误报告
典型的越界访问报告如下所示:

================================================== ================
BUG:AddressSanitizer:在kmr ffff8800693bc5d3中的kmalloc_oob_right + 0x65 / 0x75 [test_kasan]中进行越界访问
通过任务modprobe / 1689写入大小1
================================================== ==========

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值