基于大模型 (Qwen) + kpatch 工具链的 Linux 内核热补丁自动生成系统, 支持内环自动修复和外环参数寻优双环迭代。
┌─────────────────────────────────────────────────────┐
│ 外环(寻优环) │
│ auto_optimizer.py │
│ 遍历 3×3=9 种 (Prompt, Temperature) 参数组合 │
│ 在 5 个 CVE 上测试,选出最优配方 │
│ │
│ ┌───────────────────────────────────────────────┐ │
│ │ 内环(修复环) │ │
│ │ benchmark.py / process_cve() │ │
│ │ │ │
│ │ LLM 生成补丁 → kpatch-build 编译 │ │
│ │ ↓ 失败 │ │
│ │ 提取精炼报错 → 喂回 LLM → 重试(≤5 次) │ │
│ └───────────────────────────────────────────────┘ │
│ ↕ HTTP │
│ ┌───────────────────────────────────────────────┐ │
│ │ MCP 服务端 mcp_server.py │ │
│ │ POST /tools/fetch_cve │ │
│ │ POST /tools/run_kpatch_build (含日志精炼) │ │
│ │ POST /tools/verify_patch │ │
│ └───────────────────────────────────────────────┘ │
│ ↕ │
│ ┌───────────────────────────────────────────────┐ │
│ │ Docker 沙箱 (openanolis/anolisos:23.4) │ │
│ │ ANCK 6.6 内核源码 + kpatch-build │ │
│ └───────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────┘
| 文件 | 用途 |
|---|---|
Dockerfile |
Docker 编译沙箱镜像定义 |
setup.sh |
沙箱环境初始化脚本(安装内核、kpatch、Python 依赖) |
mcp_server.py |
MCP 服务端(补丁获取、kpatch-build 编译、模块加载) |
benchmark.py |
自动化打榜引擎(内环:LLM 生成补丁 → 编译 → 重试) |
auto_optimizer.py |
自动寻优器(外环:网格搜索最优 Prompt + Temperature) |
cve_list.txt |
完整打榜 CVE 列表 |
sample_cves.txt |
寻优用小样本 CVE 列表(5 个) |
- Linux x86_64 服务器
- Docker 已安装并运行
- 阿里云百炼 API Key(获取地址)
# 在项目目录下执行
docker build -t kpatch-sandbox .# 启动容器(挂载项目目录,暴露 8000 端口)
docker run -itd --name kpatch-sandbox \
-v $(pwd):/workspace \
-p 8000:8000 \
kpatch-sandbox /bin/bash
# 进入容器,启动 MCP 服务端
docker exec -it kpatch-sandbox bash
cd /workspace
python3 mcp_server.py --host 0.0.0.0 --port 8000 &验证服务端启动:
curl http://localhost:8000/health
# 期望输出: {"status":"ok","kpatch_build_available":true,...}在另一个终端窗口:
docker exec -it kpatch-sandbox bash
cd /workspace
# 设置百炼 API Key
export DASHSCOPE_API_KEY="sk-xxxxxxxx"
# 运行打榜(使用 cve_list.txt 中的 CVE)
python3 benchmark.py
# 自定义参数运行
python3 benchmark.py --cves my_cves.txt --model qwen-plus --temperature 0.3结果实时写入 result.jsonl(每行一个 JSON 对象),格式:
{"_type":"meta", "model":"qwen-max", ...}
{"cve_id":"CVE-2024-1086", "success":true, "retries":2, "elapsed_seconds":45.3, ...}
{"cve_id":"CVE-2023-32233", "success":false, "retries":5, "elapsed_seconds":120.1, ...}
{"_type":"summary", "success_rate":"1/2 (50.0%)", ...}docker exec -it kpatch-sandbox bash
cd /workspace
export DASHSCOPE_API_KEY="sk-xxxxxxxx"
# 运行自动寻优(3 Prompt × 3 Temperature = 9 种组合,5 CVE × 9 = 45 次测试)
python3 auto_optimizer.py
# 自定义参数
python3 auto_optimizer.py --cves my_sample.txt --output my_report.json寻优完成后输出 optimization_report.json,包含:
- 每种组合的成功率和平均重试次数
- 自动标注的最优配置
- 逐 CVE 的详细结果
编辑 benchmark.py 顶部的 SYSTEM_PROMPT,或在运行时通过 --prompt 参数传入。
auto_optimizer.py 中预定义了 3 种 Prompt 变体:
- concise: 简洁指令型
- few_shot: 附带 kpatch 常见错误案例
- cot: 要求逐步推理(Chain of Thought)
0.1- 高确定性,适合稳定复现0.3- 平衡点(默认)0.5- 更高创造性,适合探索修复方案
修改 benchmark.py 中的 MAX_RETRIES = 5。
确保 setup.sh 中符号链接已正确建立:
ls -la /usr/src/kernels/6.6.102-5.2.an23.x86_64
ls -la /lib/modules/6.6.102-5.2.an23.x86_64/build# 检查服务端是否运行
curl http://localhost:8000/health
# 查看服务端日志
docker exec kpatch-sandbox cat /tmp/mcp_server.log脚本内置了指数退避重试(3 次),如果持续限流:
- 降低并发(一次只跑一个 CVE)
- 联系阿里云提升 API 配额