【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

原文地址:http://www.cnblogs.com/sanshigoodgoodstudy/p/16927422.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性