能否打热补丁取决于内核是否启用config_livepatch=y,而非所装工具;需同时满足config_ftrace、config_function_tracer、config_kallsyms=y,否则ftrace无法定位函数入口。

确认当前内核是否支持 Livepatch
能不能打热补丁,不看装了什么工具,而取决于内核编译时是否启用了 CONFIG_LIVEPATCH=y。很多用户装完 canonical-livepatch 或 kpatch 却失败,根源就在这里。
运行这条命令检查:
grep CONFIG_LIVEPATCH /boot/config-$(uname -r)
预期输出必须是 CONFIG_LIVEPATCH=y;若为 =m,需手动加载模块(部分发行版默认禁用);若为空或 =n,说明内核根本不支持——此时任何热补丁工具都无效,必须换内核或重编译。
-
CONFIG_FTRACE、CONFIG_FUNCTION_TRACER、CONFIG_KALLSYMS也必须为y,否则ftrace无法定位函数入口 - RHEL/CentOS 用户可快速验证:
uname -r输出含kernel-livepatch字样即表示已预置支持 - Ubuntu 用户执行
canonical-livepatch status,若提示not found,大概率是内核不支持或未启用
Ubuntu 系统启用 canonical-livepatch(开箱即用型)
这是最省事的路径,但仅限 Canonical 官方发布的 CVE 补丁,不支持自定义修复。
操作步骤很直接:
- 注册获取 token:
sudo canonical-livepatch enable YOUR_TOKEN(token 来自 https://www.php.cn/link/c7e512912fd02bf7d7006bab089d8d68) - 启用后自动轮询,补丁通常几秒内加载完成
- 验证状态:
canonical-livepatch status --verbose,重点关注KernelStatus是否为applied
常见失败点:
- 内核不在支持列表中(如自编译内核、非 HWE 内核)
-
/var/lib/ubuntu-livepatch权限异常(应为root:root且不可被其他用户写入) -
systemd-timers被禁用(sudo systemctl enable --now systemd-timers可恢复)
RHEL/CentOS 中启用 kernel-livepatch(订阅制服务)
Red Hat 提供的是订阅驱动的 livepatch 服务,不是免费开放的。它依赖 rhel-livepatch 套件和后台更新通道。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
关键动作:
- 确认已注册并启用订阅:
sudo subscription-manager register --auto-attach - 安装 livepatch 工具:
sudo yum install -y kernel-livepatch(RHEL 8+)或sudo dnf install -y kernel-livepatch - 检查可用补丁:
sudo kpatch list或查看/sys/kernel/livepatch/下的模块目录
注意:
- 补丁由 Red Hat 官方构建并签名,不接受第三方模块
- 必须使用匹配的内核版本(
uname -r输出需与kernel-livepatch包的 Requires 字段一致) - 若
kpatch list无输出,可能是未推送补丁,或当前内核版本暂未覆盖
自己构建并加载 Livepatch 模块(高级场景)
仅适用于有定制修复需求、且具备内核开发能力的团队。这不是日常运维操作,而是开发闭环的一部分。
前提条件严苛:
- 必须有与当前运行内核完全一致的源码树(包括
CONFIG_DEBUG_INFO=y和CONFIG_KALLSYMS_ALL=y) - 需安装
kpatch-build工具链及依赖:elfutils-devel、dwarves、gcc、make - 补丁必须是函数级修改(不能改结构体布局、全局变量初始化等破坏 ABI 的变更)
典型流程:
kpatch-build -s /lib/modules/$(uname -r)/build \
-d /lib/modules/$(uname -r)/source \
my-fix.patch
生成的 .ko 文件需用 sudo insmod 加载,并通过 cat /sys/kernel/livepatch/*/enabled 确认状态。
最容易被忽略的坑:
- 补丁中修改的函数必须被
ftrace支持(不能是 inline、static、或被编译器优化掉) - ARM64 架构需额外确认
CONFIG_HAVE_RELIABLE_STACKTRACE=y,否则状态迁移会卡住 - 加载失败时,
dmesg | tail -20中的错误往往比工具输出更具体,比如klp_register_patch: patch depends on symbol xxx not found










