使用场景
1、修复内核或模块的缺陷函数
内核热补丁能够动态的修复内核和模块的缺陷函数。在开发人员发现问题,或者操作系统发现安全漏洞需要修复时,可以通过将缺陷函数或者安全补丁制作成内核热补丁打入系统中的方法,在不需要重启系统或者插拔模块、不中断业务的前提下修复缺陷。
2、开发过程中增加调试或测试手段
内核热补丁也适用于在开发过程中进行调试和测试。比如在模块或者内核的开发过程中,如果需要通过在某一个函数中添加打印信息,或者为函数中某一个变量赋予特定的值,可以通过内核热补丁的形式实现,而不需要重新编译内核、安装、重启的操作。
原理分析
Kpatch基于ftrace实现内核函数的替换,类似于ftrace的动态探测点。利用mcount机制,在内核编译时在每个函数入口保留数个字节,然后在打补丁时将“被替换函数”入口保留的字节替换为跳转指令,跳转到Kpatch的相关流程中,最终进入“新函数”的执行流程,实现函数级别的执行流程在线替换
-
结合步骤1中的代码对比发现,在/proc/meminfo所看到的内容中,多了LivePatchtest项,并且在执行"cat /proc/meminfo"命令时,dmesg信息中也打印了步骤1中patch代码打印片段。这就证明了我们制作的热补丁是有效的,成功打入了当前运行的内核中。
以上即为热补丁原理、制作、打入热补丁、验证热补丁是否生效的基本方法