Miri 缓存 target 时可能经 GitHub Actions 泄露密钥
Rust 安全响应团队发布公告:Miri 会把全部环境变量写入 target/,以便 cargo miri 多次调用之间保留与构建相关的环境。若 CI 缓存了 target/,且 PR 可读该缓存,密钥就可能被 PR 工作流读出。
典型场景是:main 等分支可写缓存、PR 只读缓存;运行 cargo miri 的步骤能通过 step/env/前序步骤拿到密钥环境变量;再用 actions/cache 或 swatinem/rust-cache 缓存 target/。曾合并过代码的人可触发 PR CI,从缓存里提取信息,再推第二个 commit 覆盖痕迹。GitHub UI 有时会隐藏被覆盖的 commit,日志也会在数月后删除。
短期修复是让 Miri 只保留 CARGO_*(排除 CARGO_*_TOKEN)和 OUT_DIR。即将到来的 nightly(2026-09-22)Miri 将不再有此问题;该补丁可能尚未进入你当前的 nightly。生态扫描发现 1 个确有问题的仓库、7 个需谨慎的仓库,并已联系维护者。临时措施包括:对该 job 禁用缓存、把密钥限定到不调用 Miri 的 step、暂时关掉 Miri,然后清理缓存并考虑轮换可能泄露的密钥。即使不跑 Miri,也不应让能写公共缓存的 job 接触密钥。问题由 OpenAI 的 Predrag Gruevski 报告。
原文链接:https://blog.rust-lang.org/2026/09/21/github-actions-leaking-secrets-when-miri-output-is-cached/
Steve Klabnik:再谈命名参数与可选参数
Steve Klabnik 发文梳理 Rust 在参数/实参上的设计取舍。他从 Ruby on Rails 的 redirect_to 一类 API 谈起:灵活实参类型、options hash、默认值与类关键字语法合在一起很简洁,但调用方很难一眼看清函数到底接受什么,往往依赖文档质量。
文中区分命名参数、默认参数、可选位置参数、关键字参数等能力,并对照其他语言;也写到 Rust 目前常见的“选项 struct + Default”写法。设计难点包括:trait 方法实现里参数名是否必须与 trait 定义一致、按定义顺序从左到右求值与调用处任意顺序命名实参如何共存(data move 与 data.len() 的编译差异)、是否与 struct 字面量统一,以及参数改名带来的兼容性。作者表示仍不确定命名参数是否适合 Rust,但比过去十年更开放;文中提到当天另有一篇 Pre-RFC 讨论贴,本文是一般性思考而非背书。
原文链接:https://steveklabnik.com/writing/arguing-about-arguments/
Rust 枚举对编译器实现很合适
作者 zk4x 在编写 Rust 机器学习库的过程中,把 enum 列为用得最多的语言特性,并归纳几点:enum 可携带数据(相对 C++/Python 里 tag + 无类型列表更直接),可嵌套(如 Binary { x, y, bop: BOp }),在对齐条件下可把嵌套 tag 压进更小布局(文中示例约 12 字节),以及 match/守卫/match 元组组合便于写编译器 pass。作者称因此能在每核每秒搜索并评估数千种 kernel 变体。相关仓库:https://github.com/zk4x/zyx 。
原文链接:https://www.reddit.com/r/rust/comments/1wm3z5w/rust_enums_are_gold_for_compilers/
用 Loom 尝试抓住无锁 Rust 中的 ABA 问题
作者 Sofia 在上一篇用手动 sleep 调度复现无锁栈 ABA 问题之后,改用 Loom 按 C11 内存模型枚举合法并发交错。做法是通过 RUSTFLAGS="--cfg loom" 与 shim,把 std::sync::atomic、thread、Arc、UnsafeCell 等换成 Loom 对应实现;Cargo.toml 里把 loom 放在 cfg(loom) 目标依赖下,并为 unexpected_cfgs 登记自定义 cfg。文中还说明需用 Loom 的 UnsafeCell 包装裸指针访问,再对有缺陷的无锁栈跑测试,观察 Loom 能否检出 ABA。完整代码见作者 GitHub。
原文链接:https://sofiabelen.github.io/projects/using-loom-to-catch-an-aba-bug/
From Rust中文社区 Mike
社区学习交流平台订阅:
评论区
写评论还没有评论