2011-01-20 5 views
1

これは予期された動作だと思いましたか?Linuxおよび一般的なOSでのNvidia情報の漏えい/メモリ脆弱性メモリ保護

から:http://classic.chem.msu.su/cgi-bin/ceilidh.exe/gran/gamess/forum/?C35e9ea936bHW-7675-1380-00.htm

言い換え要約:「我々はcudaHostAlloc/cuMemHostAlloc CUDA APIコールが初期化されていない固定メモリを返すことが判明し、Linuxのポートの作業をこの穴は、潜在的に1が以前で使用されるメモリの領域を検討することを可能にします。他のプログラムやLinuxカーネルなど、あらゆるマルチユーザシステムでCUDAドライバの実行を中止することをお勧めします。

私の理解では、「通常」のmallocが初期化されていないメモリを返すということでしたので、私は

私はメモリ割り当ての動作が起こることを、次のことが可能になる方法を理解する方法...ここでの違いは何であるかが表示されません:

-userAは、機密情報を束ねるシステム上でプログラムを実行します。計算が完了すると、結果はディスクに書き込まれ、プロセスは終了し、userAはログオフします。

-userBが次にログインします。 userBは、システム内の使用可能なすべてのメモリを要求するプログラムを実行し、RAMに残されたuserAの機密情報の一部を含む初期化されていないメモリの内容をディスクに書き込みます。

私はここで何かを逃している必要があります。それは何ですか?メモリはどこかでゼロになっていますか?カーネル/固定メモリは、特別な方法で特別なものですか?

答えて

1

malloc()によって返されるメモリは、の同じプロセスで使用され、解放された後でのみ0以外の値になることがあります。決して別のプロセス。 OSは、終了した後でさえ、プロセス間で厳密にメモリ保護を強制することになっています。

カーネル/ピンメモリは、明らかに、カーネルモードドライバにOSのプロセス保護保証を解除する機会を与えた点で特別です。

これは期待された動作ではありません。はい、これはバグでした。すばやくそれを演じてくれたNVIDIAへの名誉!

1

CUDAをインストールするためにroot特権が必要なのは、NVIDIAドライバだけです。その結果、NVIDIAコンパイラとリンクを使用して実行されるすべての操作は、通常のシステムコールと標準コンパイルを使用して実行できます(適切な情報がある場合は-lol-を使用します)。セキュリティホールが存在する場合、cudaHostAlloc/cuMemHostAllocが変更されたかどうかは変わりません。

この投稿に表示されている最初の回答について私は疑念を抱いています。 mallocのマニュアルページでは、 というメモリがクリアされていないことを示しています。無料のマニュアルページには、メモリの消去については言及されていません。 メモリの消去は、予期しない(まれな)終了の問題を残している機密部分-lol-のコーダの責任であるようです。 VMS(良いが広く使われていないOS)とは別に、私はどんなOSもシステム的なクリアのパフォーマンスコストを受け入れるとは思っていません。以前にプロセス領域にあったものと、そうではなかったものが、システムが新たに割り当てられたメモリのヒープで追跡する方法についてはっきりしていません。

結論:厳しいレベルのプライバシーが必要な場合は、マルチユーザシステム (またはVMSを使用)を使用しないでください。

関連する問題