AMDのCPUにおけるRDRAND命令に不具合、Systemdが影響を受ける

2019年7月17日 20:35

 Linux向けのサービス・システム管理ソフトウェアSystemdは、いくつかのAMD製プロセッサを搭載するマシン上で適切に動作しないという。その結果、いくつかのLinuxディストリビューションでブートに失敗するなどの不具合が報告されている(Ubuntu systemd packageでのバグ報告Phoronix本の虫)。

 2018年12月にリリースされたSystemd 240では、x86-64アーキテクチャにおいてカーネルが提供する乱数源である/dev/urandomではなくRDRAND命令を使って乱数を生成するよう変更が行われた。この変更については、システムの起動直後には/dev/urandom経由では十分なランダム性が得られないためと説明されている。

 しかし、特定のAMD CPUではRDRAND命令に不具合があり、その影響でRDRAND命令を使用するよう変更されたSystemd v240以降で問題が発生することが2月に確認された。2月の時点で問題となったのはAMDのExcavatorアーキテクチャおよびそれ以前のアーキテクチャを採用するCPUで、これらのCPUではサスペンド/レジューム後にRDRAND命令がランダム値ではなく必ず「-1」(0xFFFFFFFFFFFFFFFF )を返すようになっていたという(systemdのissuesに投稿されたコメントTechPowerUp)。これによってsystemdが特定の状況下で乱数を得られず、問題が発生していたという。

 この問題はカーネルもしくはドライバの問題だとして当初は対応されなかったのだが、その後5月になって修正コードがマージされている。ただ、現時点でリリースされている最新版であるSystemd v242ではこの修正はまだ適用されていないようだ。

 そして、今度はRyzen 3000シリーズでRDRAND命令が常に不適切な値を返し、さらにそれを検出することはできないという不具合の存在が確認された。この問題は2月に確認されたものよりも影響が広く、これによってLinuxのブートに失敗する不具合が発生するとのこと。

 これらの問題の影響を受けるのは、RDRAND命令を使用するよう変更されたsystemd v240以降を採用しているLinuxディストリビューション。また、この問題と原因が同じであるかは分からないが、Windows向けのゲーム「Destiny 2」でもRyzen 3000系CPUでゲームをプレイできない不具合が確認されているという(ExtremeTech)。

 AMDはこれらの問題を修正するBIOSをマザーボードメーカーに提供済みで、BIOSアップデートによって対応できると説明している(Phoronix)。

 また、この問題の影響を受けることが報告されているUbuntu 19.04ではすでに修正パッチを適用したパッケージがリリースされている。

 なお、RDRAND命令についてはハードウェアに脆弱性がある可能性を考慮してセキュアな用途では使用すべきではないという意見もある(過去記事)。ただ、Systemdでは暗号化などのために乱数を使用しているわけではないため問題は無いと説明していた。

関連記事

最新記事