- 论坛徽章:
- 0
|
回复 3# asuka2001
不好意思,可否解釋下面這一段詳細一點,我有點兜不起來你說的- kernel hacker發明了高招,既然 kernel space不允許 page fault,我們又有這個需要,只要記錄所有解引用用戶空間地址的指令位置,發生 page fault的時候對比一下就OK了,SO 這就是 copy_from_user的由來。
复制代码 以下是我自己的觀點,有錯請指教
基本上會call到copy_from_user救代表已經進入到kernel space裡面了
下面那個from應該是user space address吧?
如果此時發現讀取from時,發生do_page_fault()則會跳到Oops.
所以from勢必一定要在記憶體內
下面copy_from_user()也不過就是一步一步的copy到kernel space某一塊地方- static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long n)
- {
- if (access_ok(VERIFY_READ, from, n))
- n = __copy_from_user(to, from, n);
- else /* security hole - plug it */
- memset(to, 0, n);
- return n;
- }
复制代码 |
|