copy_to_user出现'bad address'错误

3 c linux kernel

我试图将自定义结构从内核空间复制到用户空间.在用户空间内errno返回'坏地址'.地址错误的常见原因是什么?

if(copy_to_user(info, &kernel_info, sizeof(struct prinfo)))
Run Code Online (Sandbox Code Playgroud)

roo*_*roo 5

错误地址错误表示您提供的地址位置无效.对于你上面的情况,我猜它是因为你传递了一个副本info而不是一个指向info内存位置的指针.

查看文档,copy_to_user定义为

copy_to_user(void __user * to, const void * from, unsigned long n);
Run Code Online (Sandbox Code Playgroud)

因此,除非您的info变量是指针,否则我会将您的代码更新为:

if(copy_to_user(&info, &kernel_info, sizeof(struct prinfo)) ) {
    //some stuff here i guess
}
Run Code Online (Sandbox Code Playgroud)