皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

Linux 6.19 合并 “klp-build” 作为新的 Livepatch 模块生成方案

Linux 6.19 内核的 objtool 变更中已合并”klp-build”脚本,该脚本以源.patch 文件为输入,作为生成 livepatch 模块的新解决方案。这项 klp-build 工作由 Josh Poimboeuf 主导,其灵感来源于过去十年中从 out-of-tree Kpatch 项目中学到的经验。

Josh Poimboeuf 一直致力于 klp-build 项目,并在补丁系列的封面信中解释道:

“这一系列介绍了新的 objtool 功能和 klp-build 脚本,用于使用源 .patch 作为输入生成 livepatch 模块。

这建立在长期存在的 out-of-tree kpatch 项目概念之上,该项目始于 2012 年,多年来一直用于为生产内核生成 livepatch 模块。然而,这是一个完全重写,它结合了维护 kpatch 12 多年所积累的宝贵经验。”

与 kpatch-build 相比的主要改进:

– 与 objtool 集成:利用 objtool 现有的控制流图分析来帮助检测已更改的函数。

– 支持 vmlinux.o:支持后期链接对象,使其与 LTO、IBT 等兼容。

– 代码库简化:代码行数减少约 3k 行。

– 上游:不再使用树外 #ifdef 补丁,冗余代码大幅减少。

– 内部更简洁:符号/节/重定位包含的逻辑大幅简化,特殊节提取也更为简单。

– 强健的 __LINE__ 宏处理:通过引入 fix-patch-lines 脚本,向源 .patch 文件注入 #line 指令,以在编译时保留原始行号,避免因 __LINE__ 宏引起的假阳性二进制差异。

主要用户界面是 klp-build 脚本,它执行以下操作:

– 使用-function-sections 和-fdata-sections 构建原始内核,并加上 objtool 函数校验和。

– 应用.patch 文件并使用相同选项重新构建内核。

– 运行’objtool klp diff’检测更改的函数并生成中间二进制差异对象。

– 构建一个内核模块,该模块链接差异对象和部分 livepatch 模块初始化代码(scripts/livepatch/init.c)。

– 使用’objtool klp post-link’最终完成对 livepatch 模块(即解决链接器问题)的构建。”

这位 Red Hat 工程师的所有工作现已纳入 Linux 6.19 Git。内核安全更新和功能问题的 live-patching 对大型企业,尤其是对系统停机时间要求极低的超大规模企业来说,仍然是一个重要领域。

Linux 6.19 合并 "klp-build" 作为新的 Livepatch 模块生成方案

这个 objtool 拉取请求合并了新的 klp-build 以及相关的基础设施,为 Linux 内核的实时修补带来了重大改进。

转自  Linux 6.19 Merges “klp-build” As New Livepatch Module Generation Solution – Phoronix