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 回答
-1

我在编写一个小字符驱动程序时遇到了同样的问题。我做错的只是函数copy_to_user在失败时返回非零,所以你必须这样做..

if(copy_to_user(void *userbuf, void *kernelbuf, long len))
    return -EFAULT;

// Continue with code..
于 2015-04-21T13:44:46.220 回答