开启KASAN
KASAN(Kernel Address Sanitize)是一个动态检测内存错误的工具,主要功能是检查内存越界访问和使用已释放的内存等问题。在涉及内存的问题时,开启KASAN往往能帮助用户更快的定位问题。但是在打开KASAN后,会出现难以复现的问题,存在概率性复现的问题。
内核集成了KASAN,打开KASAN选项,重新编译内核即可使能相关功能。KASAN在Linux内核4.0版本时被引入内核,所以选择的内核代码需要高于4.0版本。另外,最基本的KASAN功能需要GCC 4.9.2支持,更多的支持则需要GCC 5.0及以上版本。以下操作以鲲鹏平台CentOS7.6为例:
- 下载RPM包kernel-alt-xxx.src.rpm。
- 安装依赖。
yum install gcc net-tools openssl-devel python-devel git bison java-devel numactl-devel ncurses-devel xmlto asciidoc newt-devel pciutils-devel bc yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
- 更新GCC。
yum install -y centos-release-scl centos-release-scl-rh yum install -y devtoolset-8-gcc devtoolset-8-gcc-c++ source scl_source enable devtoolset-8
- 确保mockbuild用户和mockbuild所属的组有效。
1 2
groupadd mockbuild useradd mockbuild -g mockbuild
- 安装RPM包。
1
rpm –ivh kernel-alt-xxx.src.rpm
安装完成,RPM构建工程自动部署在“/root/rpmbuild/SPECS”和“/root/rpmbuild/SOURCES”。
- 构建rpmbuild。
1 2
cd /root/rpmbuild/SPECS rpmbuild -bp --target=$(uname -m) kernel-alt.spec
- 编译.config配置文件,文件路径及文件名称请以实际情况为准。
1 2
cd /root/rpmbuild/BUILD/kernel-alt-xxx/linux-xxx.aarch64 make menuconfig
进入menuconfig界面后,依次选择“KASan: runtime memory debugger”,将“Instrumentation type”修改为“Inline instrumentation”,保存后退出。
,选中 - 编译内核,文件路径及文件名称请以实际情况为准。
1 2 3 4
cd /root/rpmbuild/BUILD/kernel-alt-xxx/linux-xxx.aarch64 make -j make modules_install make install
- 重启。
1
reboot
重启后选择对应的内核,内核启动较慢,约耗时5~15分钟,请耐心等待。
父主题: 分析手段