ユーザー空間アプリが ioctl メカニズムを使用してさまざまな操作を実行できるようにするデバイス ドライバーがあります。最初の ioctl 呼び出しの一部として返されるのは、アプリが他の ioctl 呼び出しで提供するユーザー空間アプリに対して不透明であると想定されるハンドルです。
ドライバーの内部では、ハンドルはカーネル空間内の制御/コンテキスト ブロックのアドレスです。アプリが返されたハンドルを忠実に返すと信頼できれば、すべて問題ありません。懸念されるのは、アプリが悪意のあるものであり、ドライバーが適切なポインター型にキャストして逆参照する任意のハンドルを返した場合です。
私が考えていた健全性チェックの 1 つは、PAGE_OFFSET と比較し、より小さい場合は拒否することです (アドレスが少なくともカーネル メモリを指していることを確認するため)。カーネル空間で合法的ではないと私が信じているページ フォールトが発生した場合はどうなりますか? 簡単な方法は、ハンドルが以前にユーザー空間に返されたかどうかを確認することですが、検索のオーバーヘッドが高くなる可能性があります (これらのハンドルが多数存在する可能性があるため)。
ハンドルを検証する堅牢で効率的な方法はありますか? どんな助けでも大歓迎です。
ありがとう。