業務程式呼叫了內核介面copy_to_user,但是傳過來的用戶態的虛擬地址為一個pte全為0的地址。此時硬體(ARM64 CPU) MMU單元產生缺頁例外進入do_page_fault()處理時,卻直接在缺頁中斷的如下代碼中進入no_context流程。
if (!down_read_trylock(&mm->mmap_sem)) {
if (!user_mode(regs) && !search_exception_tables(regs->pc))
goto no_context;
比較感到疑惑的是,為什么此時沒有在 exception_tables 表中找到相應的fixup修復地址呢?我看arch/arm64/lib/copy_to_user.S中的__arch_copy_to_user函式,有相關的對可能產生例外的指令的修復操作。
uj5u.com熱心網友回復:
呼叫之前,試試用access_ok檢查用戶地址。轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/46231.html
標籤:內核源代碼研究區
上一篇:內核 netlink 從用戶層接收到 24~27 個字符的字串時,會在字串末尾添加未知字符,使字串長度變為28???
下一篇:編譯內核時出現的問題,請大家來看看。Makefile:1078: recipe for target 'vmlinux' failed
