大佬們幫我解答一下這個情景
情景:驅動中直接使用三環指標訪問記憶體的話會導致系統崩潰,只能用 copy_from_user 等系統呼叫來拷貝用戶空間的記憶體到內核中。
查了下 copy_from_user 相關的資料,其在執行拷貝資料之前,檢查了3環指標有沒有超出用戶空間等等。
我的理解:為了內核安全,在內核訪問用戶空間的記憶體時必須要校驗指標的合法性。
但是我的疑問是,linux是怎么做到禁止內核直接訪問用戶空間的?
因為我看 copy_from_user 的代碼也只是檢查了指標合法性而已,我沒看到做了什么操作,而它就可以拷貝,直接使用指標讀取就不行。
查了些資料,cr0暫存器中有個wp位倒是可以限制內核對用戶空間中只讀的記憶體進行寫操作。但是還是不能解釋 copy_from_user 是怎么可以拷貝資料的。
所以請求各位懂這方面的大佬幫忙解答解答,謝謝!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/36168.html
標籤:內核源代碼研究區
上一篇:Redhat8.0的安裝
下一篇:這是為什么
