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