我正在完成OS类的项目,并且无法确定与将用户空间的数据复制到内核以及从内核回到用户空间的操作有关的几件事情,以及如何妥善丢弃这些信息。关于将数据复制到Linux内核或从Linux内核复制数据的问题
说我有几个系统调用:
//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(长度)复制到内核中以分配字节数并确保我实际上可以分配此内存。
4.最后使用copy_from_user
& copy_to_user
复制数据。
到目前为止,我发现的信息非常少。 1. Source code example from "Linux kernel programming"(正如指出的,Linux内核开发中的例子很危险)。 2. http://www.quora.com/Linux-Kernel/How-does-copy_to_user-work
谢谢!
为什么不使用'size_t'来表示大小的东西? – 2017-07-26 09:35:04