llama.cpp发布b11393:修复chat-peg-parser的use-after-free
该版本修复了TOOL_ID节点在TOOL_CLOSE之后到达时,current_tool仍指向已销毁的pending_tool_call所导致的内存错误,并同步更新各平台预编译包。
AI解读:llama.cpp发布b11393版本,主要变更来自PR #29942,涉及chat-peg-parser模块。
修复方式是在reset时清除该指针,发布说明称此为“Clear the pointer on reset”。
本次发布同时提供了macOS/iOS、Linux、Android、Windows等平台的预编译包,Linux和Windows中包含CUDA 12、CUDA 13、Vulkan、OpenVINO、SYCL、ROCm 10.0等不同后端版本。
openEuler与macOS Apple Silicon的KleidiAI版本标注为DISABLED。
修复由提交说明描述,属于代码层面的指针生命周期修正;来源未给出触发该问题的具体输入条件、受影响版本范围或外部复现数据。
llama.cpp发布b11393。根据发布说明,该版本包含一项来自PR #29942 的修复,提交信息为“chat-peg-parser : clear current_tool when pending_tool_call is reset”。
说明称,当TOOL_ID节点在TOOL_CLOSE之后到达时,代码会经由current_tool写入,而该指针仍指向刚被销毁的pending_tool_call可选对象,造成use-after-free,随后又对id缓冲区执行第二次free。修复做法是在reset时清除该指针。
修复内容与触发路径
发布说明把问题定位在chat-peg-parser:TOOL_ID节点在TOOL_CLOSE之后到达时写入current_tool,而该指针未随pending_tool_call的重置而清空,指向已销毁对象。后续还发生id缓冲区被二次释放。
对应的改动只有一句描述:在reset时清除指针。来源未说明该问题影响哪些模型格式、工具调用配置或历史版本,也未提供触发所需的最小输入。
- 问题模块:chat-peg-parser
- 触发条件(按提交说明):TOOL_ID节点在TOOL_CLOSE之后到达
- 后果(按提交说明):use-after-free,以及对id缓冲区的二次free
- 修复:pending_tool_call重置时清除current_tool指针
- PR编号:#29942
随版本提供的构建包
b11393的发布页列出了各平台预编译产物。macOS/iOS方向提供Apple Silicon(arm64)、Intel(x64)与iOS XCFramework,其中Apple Silicon的KleidiAI版本标注为DISABLED。
Linux方向提供Ubuntu x64/arm64/s390x的CPU包,以及Vulkan、CUDA 12、CUDA 13、ROCm 10.0、OpenVINO、SYCL FP32/FP16等后端包;另有面向Snapdragon的Linux arm64包,涵盖CPU、Adreno GPU与Hexagon NPU。
Android提供arm64 CPU和Snapdragon包;Windows提供x64/arm64 CPU、OpenCL Adreno、CUDA 12、CUDA 13、Vulkan、OpenVINO、SYCL、ROCm 10.0等版本。openEuler的x86与aarch64条目同样标注为DISABLED。
- macOS/iOS:Apple Silicon arm64、Intel x64、iOS XCFramework;KleidiAI版DISABLED
- Linux:Ubuntu x64/arm64/s390x CPU,以及Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL FP32/FP16
- Linux arm64 Snapdragon:CPU、Adreno GPU、Hexagon NPU
- Android:arm64 CPU,以及Snapdragon CPU/Adreno GPU/Hexagon NPU
- Windows:x64/arm64 CPU、OpenCL Adreno、CUDA 12/13、Vulkan、OpenVINO、SYCL、ROCm 10.0
- openEuler:x86与aarch64条目标注DISABLED