2012-10-17 72 views
0

的執行我只是想知道爲什麼copy_from_user(從,字節)做真正的副本?因爲它只是希望內核訪問用戶空間數據,它能直接將物理地址映射到內核的地址空間而不移動數據嗎? 謝謝,copy_from_user()

+0

你的意思是爲什麼它不做真正的副本?源代碼告訴你什麼? –

回答

0

「這是更好的之前知道爲什麼調用copy_from_user()使用」

因爲內核絕不允許用戶空間應用程序直接訪問內核內存,因爲如果指向的內存是無效的或在讀取時發生故障,只需簡單地使用用戶空間應用程序就可以使內核恐慌。

「這就是爲什麼!!!!!!」

所以在使用調用copy_from_user是一切,它可以創建一個錯誤給用戶,並不會影響內核功能

儘管這是它確保內核的安全可靠運行額外的努力

2

copy_from_user()通常用於編寫某些設備驅動程序。請注意,這裏沒有「映射」字節,唯一發生的情況是將字節從用戶空間映射的某個虛擬位置複製到內核空間位置的字節。這樣做是爲了強制內核和用戶分離,並防止任何安全漏洞 - 你永遠不希望內核開始訪問和讀取任意用戶內存位置,反之亦然。這就是爲什麼系統調用的參數和結果在實際運行之前被複制到用戶/從用戶複製的原因。

0

的系統調用實現的主要要求之一是檢查作爲參數傳遞用戶參數指針的有效性,內核不應該盲目追隨用戶指針作爲用戶指針可以在許多方面做手腳。主要問題是: 1.它應該是來自進程地址空間的指針 - 所以它不能進入​​其他進程地址空間。 2.它應該是一個來自用戶空間的指針 - 它不應該玩弄內核空間指針。 3.它不應該繞過內存訪問限制。

這就是執行copy_from_user()的原因。它正在阻塞和進程休眠,直到頁面錯誤處理程序可以將交換文件中的頁面帶到物理內存。

相關問題