LDD3の例では、カーネル モジュールのメソッドの先頭access_ok()
に配置され、ioctl
ユーザー空間から渡されたポインターが有効かどうかをチェックします。ユーザー空間アプリケーションがioctl()
システムコールを呼び出して、変数のアドレスを渡す場合は正しいです。ただし、場合によっては、カーネル モジュールioctl()
の第 3 引数、最後に第 2 引数としてポインターではなく値を使用してシステム コールが呼び出されます。access_ok()
access_ok()
の 2 番目の引数として整数を渡そうとしましたが、正常に動作します。エラーは報告されませんでした。しかし、この使用法が正しいかどうかはよくわかりません。
たとえばioctl()
、ユーザー空間で 3 番目の引数を '3' にして呼び出すとします。次に、 のioctl()
メソッドでstruct file_operations
、2 番目の引数としてaccess_ok()
受け取ります。はポインターを想定している3
ため、ユーザー空間ポインターに変換されます。逆に間違ってる…access_ok()
3