来自copy_to_user的“错误地址”错误
收藏

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

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


最佳答案:

错误的地址错误表示您提供的地址位置无效。对于上面的例子,我猜这是因为您传递的是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
}

公众号