Rustの型安全性をすり抜けた lifetime バグ、11年越しに表面化した話
Rustは「メモリ安全性を保つために型システムがある」と強く打ち出してきた言語だ。その土台を揺らす unsoundness の報告が、GitHub の rust-lang/rust に上がった。しかも今回は、単なる理論上の穴ではなく、実際に昔から通るコードで再現でき、ASan では stack-use-after-scope まで出る。Rust の borrow checker や lifetime の話は入り組んで見えるが、今回の件は「安全だと思っていた前提が、Drop のタイミングを通じて破られる」という、かなり本質的な問題だと思う。 issue の題名は「struct's lifetime requirements can be bypassed via covariant field assignment」で、struct の lifetime 要件が共変な field assignment を使って回避できる、という意味だ。投稿者はまず、このバグは Rust の型システムが守るべき memory unsafety に関わるため重い問題だと説明している。ただし、11年前から存在
papoo.work