星空体育(中国)2026世界杯官方app下载 linux驱动热补丁旨趣与bond双发arp热补丁示例

发布日期:2026-05-13 04:37    点击次数:187


星空体育(中国)2026世界杯官方app下载 linux驱动热补丁旨趣与bond双发arp热补丁示例

热补丁旨趣

1. 代码替换机制:Ftrace 与跳转提醒

热补丁的中枢本领基于 Ftrace(Function Tracer) 框架:

跳转提醒替换:愚弄 x86 架构下 call 提醒(5 字节)或 ARM64 的 b 提醒,在函数进口处插入跳转到新函数的提醒

初始时原子写入:通过 text_poke 等接口在初始中安全地修改内核代码段(.text),经常需要内存页写权限临时开启

旧函数保留:原始函数体保留,仅进口被"劫执",保证正在推行的旧函数实例能安全复返

2. 一致性模子:Klp 与 Kgraft

Linux 社区主措施受两种一致性保证政策: KLP (Kernel Live Patching) - 干线罗致:

住手点(Consistency Model):愚弄内核已有的 klp_update_patch_state 机制,通过任务景色符号位追踪

原子切换:当悉数 CPU 齐经过安全点(如系统调用复返、中断复返)时,新代码旅途对悉数后续调用顺利

栈回溯查验:确保莫得任务正在推行被补丁函数的旧版块(通过 walk_stack 查验) Kgraft - SUSE 决策(历史):

罗致访佛 RCU 的蔓延开释机制,旧代码执续初始直到悉数援用退出

3. 数据结构:Livepatch 模块

// 中枢结构体

struct klp_func {

void *old_func; // 指向原函数

void *new_func; // 指向补丁函数

char *old_name; // 象征名(用于查找)

struct klp_object *obj;

};

struct klp_patch {

struct klp_object *objs;

struct list_head list;

bool enabled;

// ...

};

4. 加载与激活历程

模块加载:通过 insmod patch.ko 加载包含新函数的 ELF 模块

象征剖判:klp_resolve_symbols 剖判旧函数地址(通过 kallsyms)

注册补丁:调用 klp_enable_patch 注册到 livepatch 子系统

一致性恭候:遍历悉数任务,查验栈中是否包含被替换函数

原子激活:悉数 CPU 同步后,通过 arch_klp_patch_func 写入跳转提醒

顺利证据:后续调用顺利插足新函数旅途

5. 限度与限制

非语义变更:只可修改函数收尾,开云kaiyun中国手机APP下载不成篡改数据结构布局(结构体字段增减)

无静态变量变更:不成修改全局/静态变量语义,因为旧模块仍在援用

调用商定保执:新函数必须保执与原函数调换的 ABI(参数、复返值、调用商定)

安全点依赖:需要内核成立 CONFIG_LIVEPATCH 和 CONFIG_DYNAMIC_FTRACE

热补丁制作器用

kpatch-build kpatch-build 是一款热补丁制作器用,星空体育官方网站可在不重启系统和中断业务的情况下对操作系统内核进行CVE和Bug开导。 接济架构: X86,ARM64 上游社区:https://github.com/dynup/kpatch ![[Pasted image 20260508174701.png]]

准备职责

以Redhat系列linux为例

依赖准备 确保不错编译内核和驱动

yum install -y make gcc patch bison flex openssl-devel elfutils elfutils-devel dwarves bc perl

时时彩app官方网站下载

内核信息准备 下载kernel-debuginfo,kernel-devel,kernel source

装配kpatch-build 不错聘任顺利按照官方编译的rpm包,或我方编译

rpm装配 yum install kpatch-build

编译

wget https://gitee.com/anolis/kpatch-build/repository/archive/master.zip

解压v0.9.9.tar.gz

调用patch.sh剧本,把仓库中的patch打上源码

./patch.sh

插足kpatch-0.9.9目次下 若是你是需要使用kpatch core module加载(即kpatch.ko),诞生BUILDMOD=yes

make BUILDMOD=yes && make BUILDMOD=yes install

若是不需要使用kpatch.ko,使用livepatch

make && make install

kpatch-build使用

kpatch-build -n kpatch-test -s /root/hotfix/linux-4.19.91-26.4.an7 -c /root/hotfix/.config -v /root/hotfix/vmlinux -o /root/hotfix/output/ -dddddd -R /root/hotfix/test-livepatch.patch

其中:

-n 补丁称号

-s:指向源代码目次

-c: config文献

-v: vmlinux文献

-o: 居品输出目次

test-livepatch.patch:补丁文献

-d: 输出debug信息

制作oot hotfix

制作oot hotfix的过程与制作kernel hotfix的过程一致,仅仅输出参数分辨

kpatch-build -s {path_to_kernel_source} -c {path_to_kernel_config} -v {path_to_kernel_vmlinux} --oot-module-src {path_to_oot_module_source} --oot-module {path_to_oot_module_ko} {path_to_patch_file}

使用评释

热补丁中自带kpatch管束器用 加载热补丁:

kpatch load kpatch-test.ko

卸载热补丁:

kpatch unload kpatch-test.ko

热补丁列表:

kpatch list

示例

linux低版块bond驱动新增双发arp功能

准备

装配kernel干系debuginfo包

arp双发patch

--- bonding/bond_main.c 2026-05-01 01:07:34.956327587 -0400

+++ bonding/bond_main.c 2026-05-01 01:11:01.920233936 -0400

return slave;

}

+static netdev_tx_t bond_xmit_broadcast(struct sk_buff *skb,

+ struct net_device *bond_dev);

/* Use this Xmit function for 3AD as well as XOR modes. The current

* usable slave array is formed in the control path. The xmit function

* just calculates hash and sends the packet out.

struct bond_up_slave *slaves;

struct slave *slave;

+ if ( skb->protocol == htons(ETH_P_ARP) ) {

+ return bond_xmit_broadcast(skb, dev);

+ }

+

slaves = rcu_dereference(bond->usable_slaves);

slave = bond_xmit_3ad_xor_slave_get(bond, skb, slaves);

if (likely(slave))

编译剧本build.sh

path_to_kernel_source=/lib/modules/4.18.0-372.9.1.el8.x86_64/build

path_to_kernel_config=/boot/config-4.18.0-372.9.1.el8.x86_64

path_to_kernel_vmlinux=/usr/lib/debug/lib/modules/4.18.0-372.9.1.el8.x86_64/vmlinux

path_to_oot_module_source=/root/bondingorig

path_to_oot_module_ko=/root/bonding.ko

path_to_patch_file=/root/arp.patch

kpatch-build -s ${path_to_kernel_source} -c ${path_to_kernel_config} -v ${path_to_kernel_vmlinux} --oot-module-src ${path_to_oot_module_source} --oot-module ${path_to_oot_module_ko} ${path_to_patch_file} -t ''

编译

sh build.sh

装配

kpatch load livepatch-arp.ko

细心

热补丁加载时,需要确保悉数CPU齐完成函数替换星空体育(中国)2026世界杯官方app下载,是以若是有其他程度永劫分占用CPU,可能导致加载热补丁失败,需要其他程度开释CPU后智力得胜。






Copyright © 1998-2026 星空体育中国官网入口™版权所有

jiqingauto.com备案号 备案号: 

技术支持:®星空体育中国 RSS地图 HTML地图

星空体育中国官网入口

热点资讯

推荐资讯