llama.cpp 修復 ggml_roll 邊界檢查的有符號溢位
llama.cpp 修掉了 ggml_roll 邊界檢查裡的未定義行為:原先用 abs(shift) 校驗位移量,但 abs(INT_MIN) 本身就是有符號整數溢位,且在邊界檢查執行前就已求值,現改為符號安全的比較方式(#30375)。
原標題:b12083
閱讀原文
| 評分 | 40 / 40(平均 40,門檻 60) |
| 狀態 | 未入選 |
|---|
原文
ggml: avoid signed overflow in ggml_roll bounds check ( #30375 )
ggml_roll validated each shift with abs(shift), but abs(INT_MIN) is signed
integer overflow UB evaluated before the bounds check runs. Compare with a
signed-safe test instead.
Website:
https://llama.app
Attestations:
https://github.com/ggml-org/llama.cpp/attestations/63348301
macOS/iOS:
macOS Apple Silicon (arm64)
macOS Apple Silicon (arm64, KleidiAI enabled) DISABLED
macOS Intel (x64)
iOS XCFramework
Linux:
Ubuntu x64 (CPU)
Ubuntu arm64 (CPU)
Ubuntu s390x (CPU)
Ubuntu 26.04 s390x (CPU)
Ubuntu 26.04 s390x (zDNN)
Ubuntu x64 (Vulkan)
Ubuntu arm64 (Vulkan)
Ubuntu x64 (CUDA 12) - CUDA 12.8 libraries
Ubuntu x64 (CUDA 13) - CUDA 13.4 libraries
Ubuntu arm64 (CUDA 13) - CUDA 13.4 libraries
Ubuntu x64 (ROCm 10.0)
Ubuntu x64 (OpenVINO)
Ubuntu x64 (SYCL FP32)
Ubuntu x64 (SYCL FP16)
Linux arm64 (Snapdragon: CPU, Adreno GPU, Hexagon NPU) - setup guide
Android:
Android arm64 (CPU)
Android arm64 (Snapdragon: CPU, Adreno GPU, Hexagon NPU) - setup guide
Windows:
Windows x64 (CPU)
Windows arm64 (CPU)
Windows arm64 (OpenCL Adreno)
Windows x64 (CUDA 12) - CUDA 12.4 DLLs
Windows x64 (CUDA 13) - CUDA 13.4 DLLs
Windows arm64 (CUDA 13) - CUDA 13.4 DLLs
Windows x64 (Vulkan)
Windows arm64 (Vulkan)
Windows x64 (OpenVINO)
Windows x64 (SYCL)
Windows x64 (ROCm 10.0)
openEuler:
DISABLED
openEuler x86 (310p)
openEuler x86 (910b, ACL Graph)
openEuler aarch64 (310p)
openEuler aarch64 (910b, ACL Graph)
UI:
UI
相關報導
llama.cpp releasesAI 評分46
llama.cpp 建置 b11529 修復了 ggml 中 ggml_acc 的越界寫漏洞:ggml_acc_impl 將 size_t 偏移量收窄為 int32_t 時未做檢查,超大偏移會截斷成負數,再被符號擴充套件為巨大 size_t 導致邊界斷言失效,可在 dst 緩衝區下方越界寫入。修復方式是在收窄前檢查偏移量,與 ggml_set_impl 中已有檢查保持一致。該版本同時提供 macOS、Linux、Windows、Android 等多平台預編譯包。
llama.cpp releasesAI 評分44
llama.cpp 建置 b11972 修復了兩個可能導致越界寫入的缺陷。common 部分讀取控制向量時,方向張量的層索引此前沒有上界,超大索引會讓以 int 計算的緩衝區大小和寫偏移溢位,從而寫到緩衝區之前;現在改為傳入模型層數、拒絕超限索引,並用 size_t 計算。
llama.cpp releasesAI 評分40
llama.cpp 發布 b11563 建置,其中 ggml 把符號預設可見性改為 hidden,避免一批內部符號通過 GGML_API 洩漏(#30014,討論見 #29997)。同批建置覆蓋 macOS/iOS、Linux、Windows、Android 與 openEuler,含 CUDA 12/13、ROCm 10.0、Vulkan、SYCL、OpenVINO 等後端。
llama.cpp releasesAI 評分41
llama.cpp 建置版本 b11895 修復了 Metal 後端在大型矩陣輸出偏移時出現的整數溢位,同時加寬了 batch 偏移與 MUL_MAT_ID 的 token 索引。改動由 Codex 輔助完成,屬於影響大模型在 Apple Silicon 上推理正確性的底層修復,本次建置仍按慣例提供 macOS、Linux、Windows、Android 等多平台二進位制包。
llama.cpp releasesAI 評分37
llama.cpp 發布建置 b11719,本次唯一一項程式碼改動來自 PR #30572:ggml-cuda 的 fattn(flash attention)在 k_VKQ_max 等於 k_VKQ_max - nbatch_fa 時不再做越界檢查,只涉及 CUDA 後端的 flash attention 計算路徑。