使用copy_to_user将数据从内核复制到用户空间时出错

问题描述

#include <linux/kernel.h>
#include <linux/uaccess.h>    
unsigned long long cnt = 0;
asmlinkage long sys_customcall(unsigned long long __user *output)
{
     unsigned long err;            
     err = copy_to_user(output,&cnt,sizeof(unsigned long long));
     return err;
}  

我正在实现一个简单的系统调用。我想将一个值从内核(cnt)复制到用户指针(output)。但是,当我运行代码err = 8时,该代码为sizeof(unsigned long long)-用户端值没有更改。我做错了什么? 我正在使用5.4.59版的Linux内核。

用户级代码如下。

#include <stdio.h>
#include <linux/kernel.h>
#include <sys/syscall.h>
#include <unistd.h>
int main()
{
    unsigned long long cnt=0;
    long int err = syscall(436,&cnt);
    printf("System call returned %lu\n",err);
    printf("System call returned %llu\n",cnt);
    return 0;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)