rustsec 5小时前 · 2026-09-29 02:43:34 · 1 阅读
RUSTSEC-2026-0301: Vulnerability in stack_collections
报告时间
2026 年 9 月 22 日
发布时间
2026 年 9 月 22 日
受影响包
stack_collections
(crates.io)
类型
漏洞
分类
关键词
#double-free(二次释放)
#unwind-safety(展开安全)
参考链接
已修复版本
>=0.3.3
<0.3.0
描述
概述
StackVec::retain 原先要等内部循环执行完毕才会把新长度写入 self.len。如果 retain 谓词或被移除元素的 Drop 实现在循环结束前发生 panic,栈展开过程中 self.len 仍保持 retain 之前的原始值,导致 0..len 范围内残留一个已复制或已销毁的元素。随后 StackVec 自身的 Drop 会再次处理该槽位,引发二次 drop(对持有堆内存的类型则造成 double-free)。
影响
该漏洞影响 StackVec<T, CAP>::retain,前提是 T 实现了 Drop,且谓词或被移除元素的析构函数可能 panic,并且构建启用了栈展开(panic = "unwind")。no_std 或 panic = "abort" 的构建不会触发此问题,因为不会发生栈展开。
修复
已在 0.3.3 中通过防展开安全的回移守卫机制修复,与 alloc::vec::Vec::retain 采用的方案一致。
本公告基于 CC0-1.0 许可证发布。
原始来源: rustsec