必须交叉验证补丁是否真正生效,仅靠uname -r或内核版本号无法判断cve是否被缓解;需检查kptr_restrict值、livepatch/kpatch状态、内核缓解参数及实际行为变化。

不能只看 uname -r 或 rpm -q kernel,必须交叉验证补丁是否真正生效。同一内核版本号(如 5.15.0-76-generic)在不同发行版、不同更新批次下,可能一个已修复 CVE-2024-1086,另一个完全未打补丁——仅靠版本字符串无法判断漏洞是否被缓解。
查 /proc/sys/kernel/kptr_restrict 是否为 0
热补丁(livepatch/kpatch)和某些内核缓解机制(如 KPTI、SMEP)依赖符号可见性。若 kptr_restrict 被设为 2 或 1,livepatch 可能加载失败或函数定位失败:
- 运行
cat /proc/sys/kernel/kptr_restrict;预期值应为0 - 若为
1或2,需临时改回:sudo sysctl kernel.kptr_restrict=0 - 注意:该设置重启后失效,如需持久化,写入
/etc/sysctl.conf
确认 livepatch 模块是否加载并 applied
Ubuntu 的 canonical-livepatch 和 RHEL/CentOS 的 kpatch 都有明确的状态接口,但输出含义易被误解:
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
- Ubuntu:运行
canonical-livepatch status --verbose,重点看KernelStatus字段 ——applied表示补丁已加载且生效;apply-error或not-applied不代表失败,可能是内核不支持或补丁未推送 - RHEL/CentOS:运行
sudo kpatch list,输出中Loaded列为yes且State为applied才算真正生效;若为error,需查dmesg | grep -i kpatch - 通用检查:
lsmod | grep -E "(livepatch|kpatch)"应返回模块名;若为空,说明模块根本没加载
验证具体 CVE 是否被缓解(非版本比对)
很多用户卡在“明明装了新内核包,但漏洞扫描仍报红”。这是因为补丁可能未启用、未触发或被绕过:
- 检查内核命令行参数:
cat /proc/cmdline | grep -E "(kpti|pti|spec_store_bypass_disable|l1tf)",例如pti=on是 KPTI 缓解的开关,缺参数即未启用 - 读取缓解状态文件:
grep . /sys/devices/system/cpu/vulnerabilities/* 2>/dev/null,关注meltdown、spec_store_bypass等条目是否显示mitigation而非vulnerable - 对 livepatch 场景:直接测试补丁修改的行为,例如 kpatch 示例中改了
/proc/meminfo的字段名,就用grep -i chunk /proc/meminfo看是否变成大写 —— 行为变了才叫真生效
最常被忽略的是:补丁模块加载成功 ≠ 漏洞被缓解。有些补丁需配合启动参数、用户空间工具(如 systemd 的 RestrictAddressFamilies)或应用层配置才能起效。别只盯着 kpatch list 输出的 applied 就放心,得拿实际行为或内核暴露的缓解状态去对。










