我正在完成 OS 类的项目,无法弄清楚与安全地将数据从用户空间复制到内核并从内核复制回用户空间有关的几件事,以及如何正确丢弃这些信息。
假设我有几个系统调用:
//copies data into kernel space
long sys_into(void __user *data, long length);
// copies data into user space
long sys_from(void __user *data, long length);
在这两种情况下long length
都是要复制的字节数。
到目前为止我能够弄清楚的事情:
1. 验证指针*data
不是null
.
2. 验证length < 0
3. 我需要使用access_ok
. 但是,我不确定是否需要将它用于这两个函数或仅用于long sys_into()
3。当使用 kmalloc(length) 复制到内核时分配字节数并确保我可以实际分配此内存。
4. 最后使用copy_from_user
©_to_user
复制数据。
到目前为止,我发现的信息很少。1.来自“Linux内核编程”的源代码示例(正如所指出的,Linux内核开发中的示例是危险的)。2. http://www.quora.com/Linux-Kernel/How-does-copy_to_user-work
谢谢 !!!