11年も見つからなかったバグが、
そう簡単に踏めるわけがない

――Rustの開発者が、危険度を下げた理由として

写真はイメージ Photo by Chris Ried on Unsplash

10/14 11:39 / 発信国:米国 / 記者:工藤

Rustの安全検査に11年前から穴が開いていた

10月13日、jsnellという利用者が、プログラミング言語Rustの開発ページ(GitHub)に、20行ほどのコードを貼った。unsafeという、危ない操作をするときに書く印は、どこにも使っていない。それでも、そのコードは、出番の終わった文字列の置き場所を読んだ。画面に出たのは、そのあとに作った、Xが並ぶだけの別の文字列だった。

Rustは「メモリの安全」を看板にしてきた言語だ。それを支えているのが、借用検査器と呼ばれる自動の検査だ。公式の教科書は、危ない操作をunsafeの中に閉じ込めておけば、メモリ安全の間違いはその中にしかない、と書いている。

報告の題は、構造体に付けたライフタイムの条件が、共変を使った代入で迂回できる、というものだ。報告した人は、最新の試験版と、少なくとも安定版1.85.0で同じことが起きると書いている。

11年前から通っていた

なぜ、だれも気づかなかったのか。

錆びた金属の門
写真はイメージ Photo by balesstudio on Unsplash

同じ日の議論で、Rustの型システムのチームを率いるlcnrが、「unsound since 1.4 🤣」とだけ書き込んだ。1.4から健全じゃなかった、という意味だ。Rust 1.4が出たのは2015年10月29日。ちょうど11年前の、同じ月だ。

別の開発者theemathasは、どうして今まで見つからなかったんだ、と書き込んだ。

原因はどこにあるのか。開発者maxdexhは、型を重ね合わせるときに、その型に付いたライフタイムの条件を見ていないのではないか、と書き込んだ。ただ、報告のページでは、原因がこれと決まったとは書かれていない。

15分で、危険度が一段下がった

報告から25分後、自動の番人(rustbot)が、いちばん重い「P-critical」の札を貼った。ところが、その15分後、同じ番人が「P-high」に貼り替えた。どちらも、開発者がZulipで話し合った結果だという。

ストップウォッチ
写真はイメージ Photo by Veri Ivanova on Unsplash

理由は、報告の冒頭に、あとから書き足された。本来ならP-criticalのバグだが、11年も見つからなかったバグが、そう簡単に踏めるわけがない、と。悪用するには、わざと意地の悪い後片付けの処理(Drop)を書く必要があるとも書いてある。

Rustの型システムのチームは今年、「Project Zero」という目標を出している。分かっている健全性のバグを全部直し、未定義の動きを起こす方法をunsafeだけにする、という中身だ。今回の穴は、11年のあいだ、その「分かっている」の外にあった。

では、だれが安全を検査しているのか。検査そのものは機械がやる。でも、その機械に開いた穴を見つけるのも、穴の重さを決めるのも、人だった。

ネットの評判

Hacker Newsに出たこの話には、10月14日の時点で689点、381件のコメントが付いた。

多いのは、穴が1つ見つかってもRustの値打ちは変わらない、という声だ。不完全だからといって、効いていない証拠にはならない、という書き込みが目立つ。Cのコンパイラにも、この手のバグは山ほどあるとの指摘も多い。

一方で、Cを責めて人気を得た言語が、偽の安心を与えていたとも言える、という声もある。

直し方の案は、報告から10時間ほどで届いた。Li-Zheng-Rongという人が出した案(#164277)の本文は、2行だけ。「Fixes rust-lang/rust#164250」「sound again :)」。また健全になった、という意味だ。11年開いていた穴をふさぐこの案は、10月14日の時点で、まだ確認待ちだ。

二択の設問:欠陥が分かった物、まだ使う?欠陥が分かった物、まだ使う?この話、あなたはどっち? →
次の視点

43万円の新型冷蔵庫、錆びて見える

Xで話題のアクア「AQR-DUX51B」

ジャンルを変えて「おもしろ」から。いま読まれています アクアの新型冷蔵庫が錆びて見えるのは、わざとだった

中止が4公演。倉敷は、無事に終わった

徳永英明、喉の不調からツアー復帰

ジャンルを変えて「エンタメ」から。いま読まれています 徳永英明、喉の不調から復帰 倉敷公演を無事に終える 中止4公演はどうなる?

40年仕入れてるけど、
こんな値は初めて

――エドノフーズの江戸野誠一郎社長

ジャンルを変えて「政治経済」から。いま読まれています 銚子のサバ加工、約2割が倒産や廃業 国産に替える道はあるのか
出典

いま読まれている記事

  1. 12040年度までに県立高145校減 富山県は「閉校」の表現をやめた
  2. 2「PayPayで十分」は本当? JR東「teppay」の還元率を比べてみた
  3. 3「ブルーウォーカーにスマホ乗っ取られた」 ラヴィット!6年目で初の遅刻
  4. 4タイ王妃が737を7時間操縦して北海道へ 冷ややかな声は、なぜ出てこないのか
  5. 53位DeNAが日本シリーズへ 今年できた「2勝アドバンテージ」はなぜ使われなかった
← トップへ戻る