copy_to_user无法从内核将数据复制到mmap用户?

时间:2016-11-20 14:56:57

标签: c linux-kernel kernel mmap

在用户空间程序中,我通过mmap分配一些内存作为以下函数调用:

void *memory;
int fd;
fd = open(filepath, O_RDWR);
if (fd < 0)
   return errno;

memory = mmap(NULL, 4096, PROT_WRITE, MAP_SHARED, fd, 0);
if (memory == MAP_FAILED)
      return -1;

//syscall() goes here

在系统调用的内核空间中,我试图将数据复制到内存映射区域,如下所示:

copy_to_user(memory,src,4096);

编辑:在帖子中添加了错误检查代码以便澄清 copy_to_user()调用在这种情况下反复失败,而如果我做了memory = malloc(),它就会一直成功。

在这种情况下,我是否为mmap获取了一些错误标记?

1 个答案:

答案 0 :(得分:-1)

开放成功吗?那么mmap呢?目标文件足够大吗?你能通过用户空间中的映射来写文件吗?

另外,重复的4096是你的代码错误的强烈打击。用户空间应该通过预期的大小。