c - 来自 copy_to_user 的“错误地址”错误

标签 c linux kernel

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

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

最佳答案

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
}

关于c - 来自 copy_to_user 的“错误地址”错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61893/

相关文章:

c - 我是否需要互斥锁来保护可以通过 sysfs 获取/设置的 int 值?

c - 将 TASK_COMM_LEN Linux 内核限制增加到 pthread_setname_np

c - 理解指针变量增量

c - 将作业拆分为两个线程,使用 wait、waitpid、fork

C++指针解释

c中两个数组的公共(public)数字函数

linux-kernel - 通过 mmap 提供多个内核缓冲区

linux - 如何取消受密码保护的 PDF 文件的打印保护?

Linux 不同的发行版命令

linux - 无法在树莓派 (raspbian) 上执行简单的 bash 脚本