私は Debian を私のOSとして実行し、 Guix を私のパッケージマネージャーとして実行しています。また、Guixを使用して構築された(ほぼ)最新のカーネルも実行しています。 spectre-meltdown-checker によると、私のカーネルにはv1、v2、v3の緩和策があります。
ただし、最新の安定したGCC(7.3)は つの新しいフラグ 、つまり-mindirect-branch=
choice、-mfunction-return=
choiceおよび-mindirect-branch-register
。これらのフラグをすべて有効にして世界を再構築するのは良い考えですか?その場合、どのchoiceを選択すればよいですか? keepおよびthunk-externから選択する4つの選択肢があります。前者はノーオペレーションであり、後者はユーザー指定のサンクを必要とするため、明らかに適用されません。 thunkとthunk-inlineの違いを誰かが説明できますか?
最後に、gold from Binutils も 新しいフラグ-z retpolineplt
を導入したようです。それも有効にする必要がありますか?
これらのフラグを有効にしてソフトウェアを再コンパイルする必要がありますか?一般的には違います。
平均的な人が使用するほとんどのソフトウェアは、Spectreによって深刻な脅威にさらされていません。これは非常に困難な攻撃であり、攻撃者が既にコンピュータ上で任意のコードを実行できる必要があります。さらに、 Phoronixのベンチマーク は、かなりのパフォーマンスヒット(場合によっては40%)が発生する可能性があることを示しており、そのヒットはパフォーマンスに敏感であるがシークレットを処理しないビデオゲームなどによく現れます。情報。偏執的だと感じている場合は、これらのフラグを使用してカーネル、Webブラウザー、およびパスワードマネージャーを再コンパイルすることを検討してください。
一方、共有ホスティングサービスを実行している場合、または中程度に価値のあるサイト(eコマースなど)を実行している場合on共有ホスティングサービスの場合は、Spectre緩和策を有効にしてソフトウェアを再コンパイルすることを検討してください。この状況では、未知のユーザーからの任意のコードが常にコンピューター上で実行されています。さらに、Spectre攻撃を阻止するために必要な時間を正当化するのに十分な価値のある情報を処理している可能性があります。
「thunk」、「thunk-external」、「thunk-inline」の違いは、基本的にパフォーマンスとサイズのトレードオフです。「thunk」は入力ファイルごとに1つのthunkセクションを作成し、「thunk-inline」は間接ブランチごとに1つ作成しますまたは関数の戻り、および「thunk-external」は、プログラム全体に対して1つのサンクセクションを使用します。サンクインラインは通常が最も高速ですが、コードが大きくなり、使用可能なキャッシュスペースがオーバーフローする場合は、大幅な速度低下が発生する可能性があります。