Linuxの起動を29万2612回も繰り返して1000回に1回発生するバグを見つけることに成功
Red Hat Linuxの開発者であるリチャード・M・W・ジョーンズ氏が、Linux v6.4の起動時にハングアップするバグがあることに気づき、Linuxを29万2612回も再起動するテストを行ったそうです。
I booted Linux 292,612 times | Richard WM Jones
https://rwmj.wordpress.com/2023/06/14/i-booted-linux-292612-times/
Dev Boots Linux 292,612 Times to Find Intel, AMD Kernel Bug | Tom's Hardware
https://www.tomshardware.com/news/dev-boots-linux-292612-times-for-1-in-1000-kernel-bug
ジョーンズ氏が起動時のハングアップをバグではないかと疑ったのは、ネットワーク経由でブロックデバイスにアクセスするためのプロトコル「nbdkit」を使ったいくつかのサーバーソフトウェアのテストで、仮想マシンのディスクイメージにアクセスするライブラリ「libguestsfs」と併用するとランダムにハングアップすると気付いた時でした。ジョーンズ氏は、自分でこのバグを発見したことを証明するため、バグの特定に動き出しました。
ジョーンズ氏によると、オープンソースのプロセッサエミュレータ「QEMU」を起動した時に、起動プロセスの同じ段階で常にバグが発生することがわかったそうです。
Linux kernel hangs rarely when booting on the latest qemu (#1696) · Issues · QEMU / QEMU · GitLab
https://gitlab.com/qemu-project/qemu/-/issues/1696#note_1428829389
そこで、ジョーンズ氏はLinuxを29万2612回も起動し、バグが起こらないかどうかをチェックしたそうです。すると、1000回に1回の割合で起動時にハングアップすることが判明。29万2612回も再起動を行うテストは合計で21時間かかったそうですが、「そこまで再起動テストを行うまでには何日にもかかりました」とジョーンズ氏は語っています。
そして、仮想マシンのファイルシステムを検査するためのコマンドライン「guestfish」をループで1万回実行し、多くのインスタンスを並行して実行し、出力を解析して原因を突き止めました。Linuxの起動をまれにさまたげていた犯人は、カーネルコンソールにタイムスタンプを表示する「printk time」のリグレッションだったとのこと。
ジョーンズ氏によると、Linux v6.0とv6.4-rc6で比較することで、ブートハングの犯人を絞り込むことができたと語っています。ジョーンズ氏は「printk timeのコードコミットを元に戻すと、問題は解決します」と断言しています。
LKML: "Richard W.M. Jones": printk.time causes rare kernel boot hangs
https://lkml.org/lkml/2023/6/13/733
なお、ジョーンズ氏によると、なぜかこの起動バグはAMD製CPUが載ったマシンよりも、Intel製CPUが載ったマシンの方が発生頻度は低かったそうです。
・関連記事
ハッカーがTwitterやGitHubでセキュリティ研究者になりすましてWindowsやLinuxにマルウェアを感染させる「偽の概念実証エクスプロイト」を公開している - GIGAZINE
Linuxカーネルに特権昇格可能な重大な脆弱性が発見される、Android端末にも影響あり - GIGAZINE
ステルス性の高い新たなLinuxマルウェア「シキテガ」についてサイバーセキュリティ会社が解説 - GIGAZINE
ロシアの軍事マルウェアネットワークが「自爆コマンド」で壊滅、FBIのオペレーション・メデューサの成功によって - GIGAZINE
・関連コンテンツ