kpatch status
上周的 LinuxCon North America 2014 上 kpatch
算是赚足了眼球,有两个 talk 分别来自红帽的开发者和来自日立 Linux 技术研究中心的研究员(提出了一个不用 stop_machine()
的新实现)。而 SUSE 的 kGraft 则都未出现。
从项目的进度和社区参与度来看,基本可以认为红帽在 dynamic kernel patching 工具之战中胜出(个人观点),非常有望被并入上游 Linux 内核。代码 100% self-contained (自给)。
下面是一些来自 Josh Poimboeuf 的 kpatch - Have your security and eat it too! 这个 slide 的一些亮点。
kpatch 起初是红帽的内部项目,2014年2月开源 host 在 GitHub 上。其目标是并入上游 Linux 内核。目前已经稳定且可用。
目前已确认 kpatch
可以在以下发行版上正常工作
Fedora 20
Ubuntu 14.04
RHEL 7
Oracle Linux 7 (RHCK only)
CentOS 7
Debian 7 Wheezy (测试可用,不过 3.14 内核升级后有问题,尚未修复)
Arch Linux (只是据说,未有确认)
kpatch 专注于安全(具有灵活性和可预见性),服务器 uptime (还是安全),给内核打安全补丁和重启不再挂钩。
利用 ftrace 来实现 patching / 替换旧方法(代码)的新方法是一等公民 、 和 oops ftrace kprobes kdump perf 等兼容 / 支持 taint flag
特性
patch rollback
patch on reboot
Atomic patch upgrade
Module patching (and deferred)
User load/unload hook functions
Skip backtrace safety check
注意:包含数据结构和数据语义(Data Semantic)变化的补丁被认为是不安全的。
局限性
需要人肉分析和评估补丁的安全性(改变的方法是做什么的,这个补丁做什么,补丁如何改变数据交互,按需修改补丁,最好是有个内核方面的专家)
kpatch 并不是一个通用升级工具,用发行版的包管理工具来升级内核(或自己编译分发)
目前支持约80%的 CVE 补丁,受限于数据结构的变化和边缘情况。目标是达到99%。
stop_machine() 延迟 1ms-40ms (有个日本人已经给出了改进,实际上是弃用该方法的建议,见 issue #138)
目前只支持 x86_64 架构
下面附上来自7月中旬 LKML 的 kpatch VS kGraft 优缺点比较(完整信息请看原文)
kpatch advantages compared to kGraft:
100% self-contained in its own module.
Doesn’t rely on changing all the kthreads.
Patch is applied atomically using
stop_machine()
, so it’s safer with respect to data semantic changes.Patching atomically also makes it much easier to understand and analyze a patch to determine whether it’s safe for live patching.
Already supports many advanced features which kGraft is lacking:
patched functions can access non-exported symbols, e.g. static variables and functions
safe unpatching
module patching (and deferred module patching)
atomic patch replacement
supports atomic load/unload user hook functions
proper duplicate symbol handling
address verification sanity checks
sophisticated user space tools for analyzing and converting source patches to binary patch modules
ability to properly deal with many special sections (__bug_table,.data..percpu, etc)
kpatch disadvantages compared to kGraft:
- There is some
stop_machine()
latency. But we’ve found that stop_machine() is still pretty fast. We measured ~1ms on an idle system and ~40ms on a heavily loaded 16 CPU system.
LinuxCon NA 2014 Slides: http://events.linuxfoundation.org/events/linuxcon-north-america/program/slides