如何使用copy_to_user

yil*_*lah 7 system-calls linux-kernel

我正在尝试将自定义系统调用添加到linux内核中.这是一个简单的代码:

#include <linux/mysyscall.h>
#include <linux/kernel.h>
#include <asm/uaccess.h>
#include <asm/system.h>

asmlinkage int sys_mysyscall(int *data){

    int a = 3;

    cli();
    copy_to_user(data, &a, 1);
    sti();

    printk(KERN_EMERG "Called with %d\n", a);

    return a;
}
Run Code Online (Sandbox Code Playgroud)

我可以编译一个添加了mysyscall的内核,当我尝试使用以下用户程序访问它时:

#include <linux/mysyscall.h>

int main(void){

    int *data;
    int r;
    int a = 0;
    data = &a;

    r = mysyscall(data);

    printf("r is %d and data is %d", r, *data);
}
Run Code Online (Sandbox Code Playgroud)

*数据不等于3,等于0.

我应该如何使用copy_to_user来修复它?

pra*_*tsm 5

向用户代码行的复制仅从“a”复制一个字节。在小端系统的情况下,它将为 0。复制所有 4 个字节以获得正确的结果。