首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用copy_to_user()将数据从内核复制到用户空间时出错

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

Stack Overflow用户
提问于 2020-09-16 19:50:10
回答 1查看 152关注 0票数 1
代码语言:javascript
复制
#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) )时,用户端值没有改变。我做错了什么?我使用的是linux-kernel版本5.4.59。

用户级代码如下。

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2020-09-17 21:15:13

当我将链接更改为SYSCALL_DEFINEx宏时,问题得到了解决。这不确定,但我相信这与x86_64系统调用包装器有关。This link was helpful。谢谢你们所有人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63919453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档