1

Spectre V4 (投機的ストア バイパス) の脆弱性について詳しく知ることができる場所があるかどうか知っている人はいますか? V1~V3とForeshadowはもう知ってる。Intelの説明、特にサンプルコードが少しわかり にくいことがわかりました(ここにコピーしました)

X = &K;      // Attacker manages to get variable with address of K stored into pointer X
<at some later point>
X = &M;      // Does a store of address of M to pointer X
Y = Array[*X & 0xFFFF]; // Dereferences address of M which is in pointer X in order to
      // load from array at index specified by M[15:0]

最後の 2 つの命令間には真の依存関係があるため、プロセッサはどのようにして最後のロードを投機的に実行できたのでしょうか。(順不同で実行しても、真の依存関係を尊重する必要があると思いますよね?)

4

1 に答える 1

1

この質問に対する答えは、リンクされたインテルの投稿、特にこの段落にあります。

投機的ストア バイパスは、多くの高性能プロセッサに搭載されているメモリの曖昧さ回避予測子機能を利用して、先行するオーバーラップする可能性のあるストアのアドレスが不明な場合でも、ロードを投機的に実行できるようにします。ロード アドレスが未知のアドレスとオーバーラップしないとプロセッサが予測した場合、ロードは投機的に実行される可能性があります。実際にオーバーラップがあった場合、ロードは古いデータを投機的に読み取る可能性があります。

コード例では、プロセッサーは*X( variable からのX) ロードが 2 行目の variable へのストアとオーバーラップしないことを予測しますX。 ほとんどの場合、Xそこにあるの両方のインスタンスが同じ名前。より良い例は、次のようなものです (これは、非最適化コンパイラでコンパイルされた疑似 c であると仮定します)。

X = &K;
Z1 = &X;
Z2 = &X;
*Z1 = Z1;
Y = Array[*Z2 & 0xFFFF]; 

ここでは、同じ場所を参照する 2 つのポインター (Z1 と Z2) があります。しかし、CPU はそれらがオーバーラップしないと予測する可能性があるため、"*Z2" は投機的に間違った値を読み取る可能性があります。

https://blogs.technet.microsoft.com/srd/2018/05/21/analysis-and-mitigation-of-speculative-store-bypass-cve-2018-3639/の説明には、おそらく説明するアセンブラー コードが含まれています。これで少し良くなりました。

于 2018-10-29T19:32:56.710 に答える