4

カスタム構造体をカーネル空間からユーザー空間にコピーしようとしています。ユーザー空間内で errno が「不正なアドレス」を返します。不正なアドレス エラーの通常の原因は何ですか?

if(copy_to_user(info, &kernel_info, sizeof(struct prinfo)))
4

3 に答える 3

5

Bad Address エラーは、指定した住所が無効であることを意味します。上記のケースでは、のメモリ位置infoへのポインタではなく のコピーを渡しているためだと思います。info

ドキュメントを見ると、次のcopy_to_userように定義されています

copy_to_user(void __user * to, const void * from, unsigned long n);

したがって、info変数がポインターでない限り、コードを次のように更新します。

if(copy_to_user(&info, &kernel_info, sizeof(struct prinfo)) ) {
    //some stuff here i guess
}
于 2008-09-15T06:56:33.490 に答える
2

info がポインター型であり、その info が有効な場所を指していると仮定すると、関数が必要とするユーザー空間にないアドレスを info が指している可能性があります。

于 2008-09-16T16:18:53.913 に答える