私が理解している限りでは、Spectreは投機的実行が完全に元に戻せないall不正な分岐予測の副作用(具体的には、CPUキャッシュ書き込みを元に戻さない)が原因です。それは、投機的実行が原因で表示されたキャッシュエントリが誤った予測の場合に削除されるようにするだけで、将来のハードウェアで修正するのが比較的簡単になるという意味ではありませんか?私はLWNの記事を読んで、キャッシュの排除動作にも問題がある可能性があることを確認しました。もしそうなら、それは何でしょうか?
目に見える投機的実行の任意の副作用を使用できます。キャッシュをまったく含まないいくつかの(おそらく多くの)副作用があります。
Spectreホワイトペーパー から:
...このセクションでは、潜在的な組み合わせを探り、投機的に実行されたコードの実質的に観察可能な影響が機密情報の漏洩につながる可能性があると結論付けます。
...
命令タイミング。
Spectreの脆弱性は必ずしもキャッシュを含む必要はありません。タイミングがオペランドの値に依存する命令は、オペランドに関する情報をリークする可能性があります。次の例では、乗数は
multiply R1, R2
の投機的実行によって占有されています。乗算器がmultiply R3, R4
で使用できるようになるタイミング(順不同実行または誤予測が認識された後)は、最初の乗算のタイミングの影響を受け、R1
およびR2
。if (false but mispredicts as true) multiply R1, R2 multiply R3, R4