2011-01-08 4 views
11

GPGPU(OpenCL、cuda、または既にコンパイルされたもの)の信頼できないコードについてはどうでしょうか?一般的なCPUで信頼できないコードを実行する方法はたくさんあります。信頼できないGPGPUコード(OpenCLなど) - 安全ですか?どのようなリスク?

グラフィックスカード上のメモリは、このようなサードパーティの信頼できないコードを実行する前にクリアされると仮定すると、

  • は、セキュリティ上のリスクがあるのですか?
  • どのようなリスクがありますか?
  • これを防ぐ方法はありますか?
    • サンドボックス可能/gpgpuで利用可能ですか?
    • おそらくバイナリ計測器ですか?
    • 他の技術?

P.S.私はgpuバイナリコードレベルのセキュリティよりもhight-level gpgpuプログラミング言語のセキュリティよりも興味があります(しかし、これらのソリューションも歓迎です)。私が意味することは、gpuオペコード(a.k.aマシンコード)への参照は大歓迎です。

+0

回答ありがとうナビ。私は計算用に別のgpuカードを使用すると仮定します(例えば古いTesla ...)。信頼できないコードのそのような実行を安全にする方法は? –

答えて

2

リスクはCプログラムと同じです。さらに、デスクトップ全体をフリーズすることもできます。非常に長い計算を実行することで、私はそれを一度やりました。その結果、画面がもう更新されなかったため、時計ウィジェットの時刻はその期間変更されませんでした。だから、あなたはGPUのもの用に2枚のグラフィックスカードを使うべきです。

+0

さて、CPUの処理用に別々のカードが1つあるとしましょう。その後、どのようなリスクがありますか?あなたは "どのCプログラムと同じ"と書いていますが、実際には "C"プログラムは "system()"を簡単に実行できますが、上記の場合はどうなりますか? –

2

GPUコードは間違いなく危険です。現在のGPUはメモリ保護を提供していないため、基本的にすべてのGPUカーネルがすべてのビデオメモリにアクセスできます。私はホストのメモリにもアクセスできるかどうかは分かりません(おそらくメモリマッピングを介して?)。カーネルをプリエンプトすることはできません。グラフィックス出力にもGPUが使用されていると、フリーズが発生します。 (通常、ドライバは数秒後に終了しないカーネルを終了します)

おそらく、AMDの新しいGPUシリーズにはいくつかのメモリ保護機能がありますが、現時点ではそれらが使用されているのではないでしょうか。現行のハードウェア(GeForce 4xx +、Radeon 6xxx +)を使用してGPUマルチプロセッサを複数のセグメントに分割することは可能ですが、それは実際にタイムスライスされたプリエンプトマルチタスクとはまったく同じではありません。 ;)

+0

実際に、NVIDIAのGPUは、少なくとも8000シリーズからのメモリ保護機能(MMU付き)を備えています。私はATIについて知りません。たとえば、GPUコードを使用してユーザースペースプロセスから特権昇格を実行することはできません。 – wump

+0

wump:本当ですか?メモリ保護がないことはかなり明らかです。割り当てられたメモリバッファの外に書き込むと、ホストシステムのクラッシュ(G80/GT200ではGF100でテストされていない)を含め、あらゆる種類の奇妙なことが起こる可能性があります。メモリを保護するMMUが存在していても、それは確かに有効ではありません。 – dietr

+0

実際、割り当てられたメモリバッファの外部に書き込むことによってGPUをクラッシュさせる可能性があります。これがレンダリングに使用されたのと同じCPUなら、システムはクラッシュします。私はいつも、これはドライバのバグが原因だと考えていました。MMUはそこにあり、アクティブですが、プロセスが他のプロセスのメモリ空間に書き込むのを防ぎます。私は*あなたが別のGPUを持っているなら、あなたのシステムをこのようにクラッシュさせることはできないと思います。 – wump

関連する問題