2017-11-15 4 views
0

私は、ユーザー空間にデータを読み書きする必要があるioctlドライバを作成しています。ドライバーでのユーザー空間ポインターの安全な取り扱い?

typedef struct { 
unsigned int* src; 
unsigned int* dst; 
unsigned int buffer_size; 
unsigned int key[8]; 
} aes_data 

、私は非常にメモリがどのように機能するかを仮想に精通していないんだけど、私はここに危険があると思う:可視化のために、ここではドライバの呼び出しに行く典型的な引数です。ユーザー空間プロセスは、所有していないメモリへのポインタを提供する可能性があります。提供されたバッファサイズによって、他のプロセスのメモリにもオーバーフローが発生する可能性があります。私のドライバでこれらのユーザー空間ポインタを責任ある方法で処理するにはどうすればよいですか?

+1

あなたは 'copy_to_user'と' copy_from_user'カーネルの機能を知っていますか?そうでない場合は、それらについて学ぶ時間です。ユーザーメモリへのアクセス(読み書き)は特定の関数(およびそれらのバリエーション)でのみ実行する必要があるためです。 – Tsyvarev

+0

私はそれらを使用しましたが、私はそれがすべてであることを認識していませんでした。ユーザーが私に指示するところでは、明示的なチェックをしていない部分はかなり無謀だったようです: – Fadeway

+0

'copy_to_user'と' copy_from_user'は基本的なチェックを行い、コピーを終了できませんでした。 –

答えて

1

ドライバで責任を持ってこれらのユーザースペースポインタを処理するにはどうすればよいですか?

ポインタが有効なものを指しているかどうかを確認する方法がないため、単純にはありません。適切なパラメータを提供するのは、ioctl()のユーザ次第です。彼らがそれをしなければ、それらのために厄介な運。

関連する問題