当前位置: 首页 > news >正文

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),仅供参考

http://www.gsyq.cn/news/1623201.html

相关文章:

  • 1bit量化技术RaBitQ:突破AI显存困境的实践指南
  • DevStore路线图:未来将支持的10大OpenEuler开发工具预览
  • Meta、Uber严控AI Token消耗,大厂从“能用就用”转向“预算管控”
  • Kiran-cc-daemon系统升级管理:软件包更新与系统维护的DBus接口设计
  • 如何安装与配置openeuler/kiran-manual?超简单步骤让你5分钟搞定
  • conda-ecopkgs安全指南:如何在openEuler上安全使用conda软件包
  • TVBoxOSC自动化构建系统终极指南:高效管理电视盒子应用开发流程
  • Git 从入门到实战
  • 鸿蒙原生 ArkTS 瀑布流布局实战:从零实现 Pinterest 风格 MasonryLayout
  • Kiran桌面环境测试框架深度解析:openeuler/kiran-tests如何保障系统稳定性
  • Kiran-shell 系统托盘插件:StatusNotifierItem 与 XEmbed 兼容性实现终极指南 [特殊字符]
  • utpasswd单元测试实践:确保密码操作零错误的12个测试技巧
  • WittyHub Web界面完全攻略:可视化AI技能发现与评估终极指南
  • 揭秘Kiran Control Panel架构:从桌面文件到插件实现的完整流程
  • hpcpilot配置文件详解:setting.ini和hostname.csv配置技巧
  • rat性能测试实战:如何验证多线程文件处理的性能提升效果
  • rat核心功能详解:10个实用技巧让你成为文件处理高手
  • 贡献utpasswd:参与开源项目的完整步骤与规范指南 [特殊字符]
  • 百度网盘最快离线下载保姆级教程
  • openEuler-portal-mcp错误处理与容错:15秒超时控制机制的设计原理
  • Kiran Authentication Service安全指南:保护你的多因子认证系统
  • utzip:用Rust重构的ZIP存档工具,如何快速上手创建你的第一个压缩包?
  • PrusaSlicer实战进阶:从模型到成品的智能切片艺术
  • 2026手机抠图软件整理:安卓苹果人像物品抠图工具实操指南
  • 如何让20年前的《暗黑破坏神2》在现代PC上重生:终极现代化改造指南
  • Kiran-shell 工作区插件:虚拟桌面管理与切换的完整实现
  • 程序员必备:Kiran计算器程序员模式完整使用指南
  • rat高级用法指南:如何使用所有命令行选项进行专业级文件分析
  • 软件工程中的软件开发模型
  • 终极DNS与DHCP解决方案:utdnsmasq核心功能详解