如何使用mmap共享用户空间和内核线程

问题描述 投票:0回答:1

我在寻找一些合适的例子来解决我的问题时遇到了一些困难。我想在用户和内核空间之间共享 4K (4096) 字节的数据。我发现很多想法说我必须从内核分配内存并将其映射到用户空间。有人可以提供一个关于如何在 Linux 2.6.38 中执行此操作的示例吗?有没有什么好的文档可以解释一下?

提前致谢。

linux-kernel kernel mmap
1个回答
5
投票

您提出的方法是一种方法,但由于用户空间不在您的控制范围内(意味着任何用户空间程序都有可能侵入内核),因此您为来自用户空间的恶意攻击提供了机会。这里还描述了这种基于内核的内存与用户空间共享:

https://web.archive.org/web/20130217131239/http://www.scs.ch/~frey/linux/memorymap.html

相反,如何在用户空间分配内存,然后从内核使用 API copy_from_user() 和 copy_to_user() 复制到/从用户空间内存?如果你想在不同的进程之间共享内存,那么你总是可以使用 IPC 相关的 API 来分配和定义内存,例如 shmget() 等。在这种情况下,内核源代码本身中有很多示例代码。

例如。

fs/checksum.c: 缺失 = __copy_from_user(dst, src, len);

© www.soinside.com 2019 - 2024. All rights reserved.