我正在完成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