来自copy_to_user的"错误地址"错误
时间:2020-03-05 18:53:10 来源:igfitidea点击:
我试图将自定义结构从内核空间复制到用户空间。内部用户空间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 }
回答
假定info是指针类型,并且info指向有效位置,则info仍可能指向该功能所需的不在用户空间中的地址。