openeuler/cve-void核心功能全解析:从补丁检索到KABI校验的完整流程

📅 2026/7/2 21:17:00 👁️ 阅读次数 📝 编程学习
openeuler/cve-void核心功能全解析:从补丁检索到KABI校验的完整流程

openeuler/cve-void核心功能全解析:从补丁检索到KABI校验的完整流程

【免费下载链接】cve-voidThis tool is used to fix CVEs from list. Automated repetitive work allows developers to focus on whether CVE's patches need to be merged, greatly improving the efficiency of CVE remediation.项目地址: https://gitcode.com/openeuler/cve-void

前往项目官网免费下载:https://ar.openeuler.org/ar/

openEuler / cve-void是一个面向内核维护场景的CVE自动化合入工具,主要用于根据CVE列表从openEuler、Ubuntu以及上游社区抓取已修复补丁,并自动合入到待修复内核分支中。项目将补丁检索、cherry-pick合入、提交信息规范化、编译验证和kabi校验串联为一套可批量执行的流程,帮助维护人员降低漏洞修复成本、提升批量处理效率和结果可追踪性。

🌟 为什么选择cve-void?6大核心优势解析

cve-void作为天翼云自主创新项目,已在欧拉社区开放源码,它通过自动化流程解决了内核CVE修复中的重复性工作,让开发者专注于补丁是否需要合入的决策环节。其核心优势包括:

1️⃣ 多源补丁自动检索

工具支持从openEuler内核仓库、Ubuntu安全页面和NVD(国家漏洞数据库)三大来源自动抓取CVE修复补丁,确保覆盖主流修复渠道。通过智能匹配算法,优先选择经过验证的稳定补丁,减少人工筛选成本。

2️⃣ 提交信息智能规范化

自动将合入的补丁提交信息标准化,通过config.json配置文件中的个人信息(如Signed-off-by和Reviewed-by)和CTKfeat编号,生成符合项目规范的提交记录。对于复杂的提交信息,工具会自动插入CVE编号和上游commit链接,确保追溯性。

3️⃣ 编译与KABI兼容性双重校验

提供可选的编译验证功能(--compile_each_cve参数),在每个CVE合入后自动执行内核编译和KABI(内核二进制接口)校验。通过config.json中定义的make_defconfigcheck_kabi命令,确保补丁不会引入编译错误或破坏ABI兼容性。

4️⃣ 冲突自动分析与依赖追踪

当补丁合入出现冲突时,工具会自动分析冲突文件的历史提交记录,识别可能缺失的前置依赖补丁,并生成详细的冲突报告。这一功能大幅降低了手动解决冲突的复杂度,尤其适合批量处理场景。

5️⃣ 结构化结果输出与统计

每个CVE的处理结果(成功/失败原因、补丁来源、编译状态等)会以JSON格式存储在cve_json/目录中,便于后续分析和审计。工具还提供详细的统计报告,清晰展示不同来源(openEuler/Ubuntu/上游)的补丁合入情况。

6️⃣ 灵活的离线与调试模式

支持离线运行(--offline参数)和调试模式(--debug参数),满足不同网络环境和问题排查需求。离线模式下,工具仅使用本地仓库数据进行处理,适合无网络环境;调试模式则输出详细日志,帮助定位问题。

🚀 完整工作流程:从CVE列表到补丁合入

cve-void的工作流程设计遵循内核开发最佳实践,将整个CVE修复过程拆分为6个关键步骤,形成闭环自动化处理:

1. 准备工作:配置与环境搭建

核心配置文件

  • cve_list:需修复的CVE编号列表,每行一个CVE ID
  • config.json:包含个人信息、CTKfeat编号、编译命令和KABI校验命令

环境部署命令

# 克隆代码仓库 git clone https://gitcode.com/openeuler/cve-void cd cve-void # 安装依赖 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt # 配置内核仓库(示例) git clone <your-kernel-repo-url> cd <your-kernel-repo-dir> git worktree add ../project/feature-batch-cve <your-fix-branch> git remote add euler https://gitee.com/openeuler/kernel.git git fetch euler

2. 补丁检索:多源智能匹配

工具通过cve_void.py的main函数启动检索流程,按优先级从以下渠道获取补丁:

  1. openEuler内核仓库:使用git log --grep='CVE: {cve}'命令搜索相关提交
  2. Ubuntu安全页面:解析https://ubuntu.com/security/{cve}页面提取修复commit
  3. NVD数据库:从https://nvd.nist.gov/vuln/detail/{cve}页面抓取上游commit
  4. Linux LTS仓库:搜索稳定版内核分支中的相关修复

这一过程通过get_fixed_commits_from_dirget_fixed_commits_from_nvd等函数实现,确保优先选择经过社区验证的补丁。

3. 补丁合入:cherry-pick与冲突处理

检索到补丁后,工具通过cherry_pick_commits函数执行合入操作,核心流程包括:

  • 执行git cherry-pick命令应用补丁
  • 自动检测并处理"补丁已存在"情况
  • 冲突时通过why_conflict函数分析依赖关系
  • 对合入成功的补丁调用modify_commit函数规范化提交信息

对于openEuler来源的补丁,工具会特别处理提交信息中的"stable inclusion"等区块,插入CTKfeat编号和CVE信息,生成符合项目规范的提交记录。

4. 编译验证:确保代码正确性

启用--compile_each_cve参数后,工具会在每个CVE合入后执行:

  1. make_defconfig命令(默认make openeuler_defconfig)生成配置
  2. make -j$(nproc)并行编译内核
  3. check_kabi命令(默认python3 build/check-kabi)验证KABI兼容性

编译和KABI校验结果会记录到JSON报告中,若失败则终止流程并提示错误原因。

5. 结果输出:结构化报告与统计

每个CVE的处理结果以JSON格式保存到cve_json/目录,包含:

  • 补丁来源(openEuler/Ubuntu/上游)
  • 合入状态(成功/失败)
  • 编译和KABI校验结果
  • 失败原因和冲突文件列表

处理完成后,工具还会输出汇总统计,示例:

From openeuler: Total successful cherry-pick commits: 12 From openeuler: Total commits already upstream (and therefore skipped): 3

6. 人工干预:异常处理与优化

对于无法自动处理的情况,工具会明确提示需要人工干预的内容:

  • 包含CAN_NOT_PROCESS_THIS_COMMIT标记的提交信息需要手动编辑
  • 冲突无法自动解决的补丁列表
  • 编译或KABI校验失败的详细日志

这些信息通过logger模块输出到控制台,同时记录到JSON报告中。

💡 实用操作指南:快速上手与高级技巧

基础使用命令

python3 cve_void.py \ --cve_list cve_list \ --openeuler_dir project/OLK-5.10/ \ --linux_lts_dir project/linux-5.10.y/ \ --linux_rolling_lts_dir project/linux-rolling-lts/ \ --fix_cve_dir project/feature-batch-cve/ \ --compile_each_cve

关键参数解析

参数作用推荐场景
--compile_each_cve每个CVE合入后编译验证生产环境,确保稳定性
--offline离线模式,不访问网络无网络环境或本地测试
--debug输出详细调试日志问题排查和开发调试
--reset_hard_each_cve每个CVE后重置分支多轮测试或网站展示

配置文件优化

通过config.json定制化工具行为:

  • person_info:添加项目所需的签名信息
  • CTKfeat:关联内部需求编号
  • make_defconfig:指定项目特定的defconfig
  • check_kabi:调整KABI校验命令

常见问题解决

  1. 补丁冲突:查看cve_json/目录下的JSON报告,根据failedReason分析缺失依赖
  2. 编译失败:检查compileFailReason字段,确认是否为配置问题或补丁兼容性问题
  3. 提交信息错误:运行git log --grep='CAN_NOT_PROCESS_THIS_COMMIT'查找需要手动编辑的提交

📈 项目价值与应用场景

cve-void特别适合以下场景:

  • 大型内核项目维护:批量处理多个CVE,减少重复劳动
  • 多版本内核支持:同时维护多个LTS版本的CVE修复
  • 安全响应团队:快速响应漏洞通报,缩短修复周期
  • 开源社区贡献:标准化CVE修复流程,提升贡献效率

通过自动化处理占比约70%的重复性工作,cve-void让开发者能够专注于补丁评估和冲突解决等核心决策环节,平均可提升CVE修复效率3-5倍。

📄 许可证与开源贡献

本项目严格遵循木兰宽松许可证, 第2版,由天翼云科技有限公司长期维护。欢迎社区贡献代码、报告问题或提出改进建议,共同完善国产操作系统的安全生态。

项目核心代码文件:

  • cve_void.py:主程序逻辑
  • scraper.py:网页内容抓取模块
  • logger.py:日志处理模块

【免费下载链接】cve-voidThis tool is used to fix CVEs from list. Automated repetitive work allows developers to focus on whether CVE's patches need to be merged, greatly improving the efficiency of CVE remediation.项目地址: https://gitcode.com/openeuler/cve-void

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考