Linux内核机制—内核热补丁
一、内核热补丁简介
1. 热补丁内核实现路径:kernel/livepatch/
2. 热补丁内核使用demo路径 lib/livepatch/,可参考 livepatch-sample.c 实验也最简单。
/* 单独测试,使用新函数替换内核中的一个旧函数 */ livepatch-sample.c /* 这三个文件是一起的 */ livepatch-callbacks-busymod.c livepatch-callbacks-mod.c livepatch-callbacks-demo.c /* 这三个文件是一起的 */ livepatch-shadow-fix1.c livepatch-shadow-fix2.c livepatch-shadow-mod.c
3. 相关内核文档
kernel-5.10/Documentation/livepatch$ ls -l callbacks.rst cumulative-patches.rst index.rst livepatch.rst module-elf-format.rst shadow-vars.rst system-state.rst
4. kpatch热补丁示意图
kpatch 工作在 function 级别,最基本的原理就是使用新的 function 替换旧的 function。主要组件包括:
(1) kpatch-build:将源差异补丁程序转换为热补丁程序模块的工具集合。它们的工作方式是在有或没有源补丁的情况下编译内核,比较二进制文件,并生成一个热补丁模块,其中包括要替换功能的新二进制版本。
(2) 热补丁模块:内核模块(.ko文件),其中包括替换功能和有关原始功能的元数据。
(3) kpatch 核心模块:内核模块(.ko文件),为热补丁模块提供接口以注册新功能以进行替换。它使用内核 ftrace 子系统来挂钩原始函数的 mcount 调用指令,以便将对原始函数的调用重定向到替换函数。
(4) kpatch utility:命令行工具,允许用户管理热补丁模块的集合。可以将一个或多个热补丁模块配置为在引导时加载,这样,即使在重新引导到相同版本的内核之后,系统也可以保持修补状态。
参考:
[华为云]Linux 内核热补丁方案介绍对比:https://bbs.huaweicloud.com/blogs/249693
linux内核热补丁: https://blog.51cto.com/u_15859002/5821625
posted on 2023-01-15 15:42 Hello-World3 阅读(1544) 评论(0) 编辑 收藏 举报