从Linux上的内核直接访问用户内存

时间:2013-01-14 13:44:30

标签: linux memory memory-management kernel

我有一个用户模式进程和内核模块。现在我想从内核读取usermode进程的某些区域,但有一个问题:没有复制用户模式内存和VA的简单访问。 所以我们拥有:目标进程的task_struct,其他相关结构(如mm_struct,vma_struct)和虚拟地址,如0x0070abcd,我想读取或者更确切地映射到我的内核模块。

我可以使用get_user_pages获取所需内存区域的页面列表,但下一步是什么?我应该以某种方式将页面映射到内核中,然后尝试将它们作为连续内存区域读取,还是有更好的解决方案?

1 个答案:

答案 0 :(得分:1)

问题是“查看”用户空间需要锁定大量内容。所以你做一个简短的副本比把所有东西锁定任意时间更好。您的用户空间进程可能未被VM映射到当前CPU。实际上,它可能完全被换成磁盘,在另一个CPU上运行,在它自己的内核调用中等等。

Linux Kernel: copy_from_user - struct with pointers