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编辑  收藏  举报

导航