【KASAN linux内存检测工具】
(本文档将引导编译一个开启kasan功能的内核)
一 简介:
Kernel Address Sanitizer 缩写KASAN;是linux内核的动态内存检测工具,
主要检查所有程序中内存越界访问和使用已经释放内存空间的问题。
!注意:开启kasan后系统可用内存会减少约1/8,并且系统运行的程序性能会大幅下降。
二 获取:
kasan在linux4.0及其之后被集成在linux内核中,但是直到linux4.4版本才开始支持ARM64(不支持ARM32);
所以在linux官网(https://www.kernel.org)下载的内核源码(版本>=4.0)已经自带了kasan,我们所需要做的就是在编译内核前将其功能打开。
三 配置kasan及编译内核:
此处以4.15.1版本内核为例(环境为在Ubuntu1804虚拟机中再编译一个带kasan功能的内核);
3.1. 将下载的内核源码压缩包拷贝到虚拟机:
3.2. 在虚拟机中解压:
tar -zxvf linux-4.15.1.tar.gz
3.3. 解压完成后,进入源码目录:
cd linux-4.15.1/
3.4. 将本地(当前linux内核)使用的配置复制到解压出来的目录中,替换linux官网默认的.config文件
cp /boot/config-版本号-编号-generic ./.config
(使用linux源码中默认的.config配置文件编译出来的内核可能无法正确启动)
例如: cp /boot/config-4.15.0-192-generic ./.config
3.4. 在新的内核中配置kansan
3.4.1. 开启配置界面:
make menuconfig
/* 执行过程中可能会报错:
① recipe for target'scripts/kconfig/dochecklxdialog' failed.
需要安装: sudoapt-get install ncurses-dev
② recipe for target 'menuconfig' failed.
检查是否安装libncurses5-dev库:
没安装: sudo apt-get install libncurses5-dev
已安装:终端窗口太小,调大终端窗口。 */
3.4.2. 在弹出的图形化界面中,使用键盘的上下按键,选中 Kernel hacking --->
然后点击回车,进入此项;再继续选中 Memory Debugging --->
点击回车,进入此项;在此界面中选中将如下几项选中:
[*] SLUB debugging on by default
<M> Memory hotplug notifier error injection module
[*] KASan: runtime memory debugger
选中某一项时,可以使用Y/N来选择或者取消(也可使用空格键切换);
第二项<M> Memory hotplug ...可选,该项是以动态加载的形式提供一个有内存操作错误的内核模块;可用于验证kasan功能是否成功开启。
3.4.3. 配置完成后,选中图形化界面下方的 < Save > 以保存更改;保存后,逐级退出(选择 < Exit>);
3.5. 编译内核
3.5.1. 在配置完成后,在源码目录下输入
sudo make -j(CPU核数)
可使用命令[ getconf _NPROCESSORS_ONLN ]查询cpu核数;
编译指令可使用:sudo make -j'getconf _NPROCESSORS_ONLN'
/* 如果在这一步骤出现了错误:“openssl/opensslv.h: No such file or directory”
则说明系统缺乏OpenSSL开发包,执行如下指令:
sudo apt-get install libssl-dev
*/
3.5.2. 编译完成并无报错后再输入
sudo make modules_install
3.5.3. modules安装完成后再输入
sudo make install
3.5.4. 等待执行完成后,重启虚拟机即可
reboot
3.6. 以带kasan版本内核启动linux系统
3.6.1. 如果重启系统后,出现了选择内核的界面,说明内核编译成功。
选择带kasan版本的内核启动即可
当前例子为 *Ubuntu, with Linux 4.15.1....
3.6.2.如果重启后直接开机,没有出现选择内核的页面.
(1)则在进入系统后,执行下面的命令:
vi /etc/default/grub
(2)然后将GRUB_HIDDEN_TIMEOUT=0使用#注释掉:
# GRUB_HIDDEN_TIMEOUT=0
保存退出;
(3)执行如下命令
sudo update-grup
然后重启系统
/* 参考资料 */
Linux内核内存检测工具KASAN:http://t.zoukankan.com/linhaostudy-p-14028917.html
Linux内核编译: https://blog.csdn.net/ibless/article/details/82349507