mmap映射物理內存之三invalid cache

目錄

? 流程設計

invalid 命令

內核態invalid

內核態invalid,用戶態mmap物理地址

PAN機制

? PAN機制歷程? ?硬件支持? ? ?

ARMv8.1-PAN 特性

Linux 內核的適配

?軟件模擬 PAN(SW PAN)

背景

Linux 的實現

總結


? ?

前述刷新cache的流程也同樣可以用于invalid 的操作。

? 流程設計

?1)寫程序寫數據到內存。

?2) 讀程序讀數據,可能從cache讀到老數據,這里invalid

invalid 命令

參考clean的操作,我們采用對應的指令。

DC IVAC, Data or unified Cache line Invalidate by VA to PoC
于是我們設計類似的接口

	 for (i = 0; i < gen_test_size; i = i + 64){temp_addr=(unsigned char *)((unsigned char *)test_virt_addr_r+i);__asm volatile("dc ivac,%0"::"r"(temp_addr));}

但實際運行的時候,報 指令無權限。也就是 用戶態不能執行這個指令

內核態invalid

內核接口,直接調用同樣的指令invalid 操作

// 失效指定范圍的 D-Cache
static void invalidate_dcache_range(unsigned long start, unsigned long end) {for (; start < end; start += cache_line_size()) {asm volatile("dc ivac, %0" :: "r"(start));}dsb(ish); // 數據同步屏障
}if (copy_from_user(&range, (void __user *)arg, sizeof(range))) {return -EFAULT;}invalidate_dcache_range(range.addr, range.addr + range.length);

用戶態接口

 // 分配測試內存size_t size = 4096;char *buffer = malloc(size);strcpy(buffer, "Test data");// 構造參數struct cache_range range = {.addr = (unsigned long)buffer,.length = size};// 調用 IOCTL 失效 Cacheif (ioctl(fd, 0, &range) < 0) {

上述代碼可以正常運行。?

內核態invalid,用戶態mmap物理地址

內核態同上,但是用戶態測試用的地址變為mmap映射

于是我們得到了內核異常,報段錯誤

  576.716499][ 4] [ T2037] Unable to handle kernel access to user memory outside uaccess routines at virtual address 0000007f7b5da740
[  576.728329][ 4] [ T2037] Mem abort info:
[  576.732249][ 4] [ T2037]   ESR = 0x9600014f
[  576.736429][ 4] [ T2037]   EC = 0x25: DABT (current EL), IL = 32 bits
[  576.742867][ 4] [ T2037]   SET = 0, FnV = 0
[  576.747048][ 4] [ T2037]   EA = 0, S1PTW = 0
[  576.751313][ 4] [ T2037] Data abort info:
[  576.755318][ 4] [ T2037]   ISV = 0, ISS = 0x0000014f
[  576.760278][ 4] [ T2037]   CM = 1, WnR = 1
[  576.764371][ 4] [ T2037] user pgtable: 4k pages, 39-bit VAs, pgdp=0000002241257000

PAN機制

? ? ? ? ?PAN(Privileged Access Never)?是 ARMv8 架構引入的一種安全特性,用于防止?內核態(Privileged Mode)直接訪問用戶態(User Mode)內存,從而增強系統對內存訪問漏洞的防護能力。其核心思想是:即使在內核態,也不能繞過 MMU 權限檢查直接訪問用戶空間數據,必須通過安全的拷貝函數(如?copy_from_user)??

PAN 通過 ARM 的頁表權限控制,強制內核態訪問用戶地址時觸發異常(即使 MMU 處于內核態)。

  • 若內核需訪問用戶數據,必須通過?copy_from_user?等安全接口(這些函數會臨時禁用 PAN)

? ? 目前板卡上此功能并未開啟。通過malloc分配的內存可以invalid,也可以驗證這一點

zcat /proc/config.gz |grep CONFIG_ARM64_SW_TTBR0_PANCONFIG_ARM64_SW_TTBR0_PAN is not set

? PAN機制歷程? ?硬件支持? ? ?

ARMv8.1-PAN 特性

  • 引入時間:2014 年(ARMv8.1-A 架構)。

  • 核心機制

    • 新增?SCTLR_ELx.PAN?控制位(EL1/EL2/EL3均可配置)。

    • 內核態訪問用戶地址時觸發?Permission Fault(即使 MMU 允許)。

  • 指令支持

    • SETPAN?指令動態切換 PAN 狀態(需配合?ERET?使用)。

Linux 內核的適配

Linux 的實現

  • 初始支持
    Linux 4.10(2016年)合并 ARMv8.1-PAN 支持,通過?CONFIG_ARM64_PAN?啟用。

  • 動態切換
    在合法訪問用戶數據時(如系統調用),臨時禁用 PAN:

    ?軟件模擬 PAN(SW PAN)

    背景

  • 兼容舊硬件
    部分 ARMv8.0 處理器(如 Cortex-A53/A57)無硬件 PAN,需軟件模擬。

  • 實現原理

    • 修改頁表權限,使用戶空間內存在內核態?不可訪問

    • 通過?TTBR0?切換模擬 PAN 效果。

  • SW PAN 補丁
    Linux 4.3(2015年)引入?CONFIG_ARM64_SW_TTBR0_PAN,通過動態切換?TTBR0?實現:

  • 性能代價
    每次用戶/內核數據拷貝需切換?TTBR0,開銷顯著高于硬件 PAN。

總結

? ?1)mmap映射的地址并不能被invalid。

? ? 2)也不能被lock

? ?總體的拷貝速率比內核管理的慢。后續我們采用巨頁來映射,看是否相關的操作是否可行。

? ?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/86831.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/86831.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/86831.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

記憶化搜索(dfs+memo)無環有向圖

這是一道可以當作板子的極簡記憶化搜索 建立a 是鄰接表&#xff0c;其中 a[x] 存儲從節點 x 出發能到達的所有節點。 b[x] 記錄從節點 x 出發的所有邊的權重之和。根據數學原理&#xff0c;我們很容易發現&#xff0c;一個根&#xff08;起點&#xff09;的期望&#xff0c;等…

使用AI豆包寫一個車輛信息管理頁面

記錄一個基本的車輛信息管理頁面&#xff0c;由豆包撰寫完成&#xff0c;只需要微調頁面即可。 主要功能是車輛信息的查詢、新增、編輯&#xff0c;項目用到了uniapp、vue3、ts、uni-ui、z-paging 頁面效果如下&#xff1a; 以上界面均由豆包生成&#xff0c;完成度非常高&am…

《HarmonyOSNext應用防崩指南:30秒定位JS Crash的破案手冊》

《HarmonyOSNext應用防崩指南&#xff1a;30秒定位JS Crash的破案手冊》 ##Harmony OS Next ##Ark Ts ##教育 本文適用于教育科普行業進行學習&#xff0c;有錯誤之處請指出我會修改。 &#x1f4a5; 哇哦&#xff01;JS Crash崩潰日志完全解析手冊 當你的應用突然閃退時&am…

閱讀筆記(3) 單層網絡:回歸(下)

閱讀筆記(3) 單層網絡:回歸(下) 該筆記是DataWhale組隊學習計劃&#xff08;共度AI新圣經&#xff1a;深度學習基礎與概念&#xff09;的Task03 以下內容為個人理解&#xff0c;可能存在不準確或疏漏之處&#xff0c;請以教材為主。 1. 為什么書上要提到決策理論&#xff1f; …

Mac OS系統每次開機啟動后,提示:輸入密碼來解鎖磁盤“Data”,去除提示的解決方法

問題描述&#xff1a; Mac mini外接了一個磁盤&#xff08;EX_Mac&#xff09;為默認使用的系統盤&#xff0c;內置的硬盤&#xff08;Macintosh HD&#xff09;為Mac mini自帶的系統盤 外置硬盤系統每次開機都會掛載內置磁盤&#xff0c;同時會提示需要輸入密碼來解鎖磁盤“…

CSS Flex 布局中flex-shrink: 0使用

flex-shrink: 0 是 CSS Flexbox 布局中的一個關鍵屬性&#xff0c;用于禁止彈性項目&#xff08;flex item&#xff09;在容器空間不足時被壓縮。以下是詳細解釋和示例&#xff1a; 核心作用 當容器的可用空間小于所有彈性項目的總寬度&#xff08;或高度&#xff09;時&#…

WHERE 子句中使用子查詢:深度解析與最佳實踐

&#x1f50d; WHERE 子句中使用子查詢&#xff1a;深度解析與最佳實踐 在 WHERE 子句中使用子查詢是 SQL 的高階技巧&#xff0c;可實現動態條件過濾。以下是全面指南&#xff0c;涵蓋語法、類型、陷阱及優化策略&#xff1a; &#x1f4dc; 一、基礎語法結構 SELECT 列 FR…

從0到1:不文明現象隨手拍小程序開發日記(一)

前期調研 不文明現象隨手拍小程序&#xff1a;在城市的快速發展進程中&#xff0c;不文明現象時有發生&#xff0c;為了有效解決這一問題&#xff0c;提升城市文明程度&#xff0c; 市民若發現不文明行為&#xff0c;如亂扔垃圾、隨地吐痰、破壞公共設施、違規停車等&#xff…

STM32F103之SPI軟件讀寫W25Q64

一、W25Q64簡介 1.1 簡介 W25Q64(Nor flash)、 24位地址&#xff0c;64Mbit/8MByte、是一種低成本、小型化、使用簡單的非易失性存儲器&#xff0c;常用于數據存儲、字庫存儲、固件程序存儲等場景 時鐘頻率&#xff1a;最大80MHz(STM32F103系統時鐘為72MHz…

vue3+element-plus 組件功能實現 上傳功能

一、整體功能概述 這段代碼實現了一個基于 Vue 3 和 Element Plus 組件庫的文件導入及預覽功能模塊。主要包含了一個主導入對話框&#xff08;用于上傳文件、展示文件相關信息、進行導入操作等&#xff09;以及一個用于預覽文件內容的預覽對話框。支持導入特定格式&#xff08;…

OpenCV中創建Mat對象

第1章 創建Mat對象 1.1. 創建空的 Mat 對象 cv::Mat mat; 1.2. 創建灰度圖像 // 創建一個 3 行 4 列、8位無符號單通道矩陣&#xff08;相當于灰度圖&#xff09; cv::Mat mat(3, 4, CV_8UC1); 1.3. 創建彩色圖像 // 創建三通道矩陣&#xff08;相當于彩色圖像&#xff0…

10、做中學 | 五年級下期 Golang循環控制

一、一個小需求 我想要打印10遍hello world,你想怎么編寫呢&#xff1f; // 需求&#xff1a;打印10遍"hello world"fmt.Println("hello world")fmt.Println("hello world")fmt.Println("hello world")fmt.Println("hello world…

機器學習算法-K近鄰算法-KNN

1. K近鄰算法是什么&#xff1f; 定義&#xff1a; K近鄰是一種基于實例的懶惰學習&#xff08;Lazy Learning&#xff09;算法&#xff0c;用于分類和回歸任務。 核心思想&#xff1a;“物以類聚”——通過計算樣本間的距離&#xff0c;找到目標點的最近K個鄰居&#xff0c;…

基于vue框架的法律知識咨詢普及系統gwuv7(程序+源碼+數據庫+調試部署+開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。

系統程序文件列表 項目功能&#xff1a;用戶,知識類型,律師,律師推薦,法律知識,新聞類型,法律新聞,咨詢律師 開題報告內容 基于Vue框架的法律知識咨詢普及系統開題報告 一、研究背景與意義 隨著法治社會建設的深入推進&#xff0c;公眾對法律知識的需求呈現爆發式增長。然而…

Netty 揭秘CompositeByteBuf:零拷貝優化核心技術

CompositeByteBuf 類 核心設計目標?? ??虛擬緩沖區??&#xff1a;將多個 ByteBuf 合并為單一邏輯視圖&#xff0c;減少數據復制。??零拷貝優化??&#xff1a;通過組合而非復制提升性能。??引用計數管理??&#xff1a;統一管理底層 ByteBuf 的生命周期。 核心成…

用css實現文字字體顏色漸變

用css實現文字字體顏色漸變 background-clip 是CSS3中新增的屬性&#xff0c;可以用于指定背景圖片或顏色的繪制范圍。利用 background-clip 屬性實現文字顏色從左到右、從綠到白的漸變效果&#xff1a; 代碼如下&#xff1a; .gradient-color {background-image: linear-gr…

SpringBatch處理數據性能優化

SpringBatch的Step默認使用同步方式批量處理數據&#xff0c;也可以通過配置將讀數改為同步&#xff0c;處理和寫入改為異步方式。 1、同步處理Step SpringBatch的Step一般由ItemReader、ItemProcessor和ItemWriter組成&#xff0c;其中ItemProcessor是可選的。他的設計思路的…

【機器學習深度學習】前饋神經網絡(單隱藏層)

目錄 一、什么是前饋神經網絡&#xff1f; 二、數學表達式是什么&#xff1f; 三、為什么需要“非線性函數”&#xff1f; 四、NumPy 實現前饋神經網絡代碼示例 五、 運行結果 六、代碼解析 6.1 初始化部分 6.2 前向傳播 6.3 計算損失&#xff08;Loss&#xff09; 6…

設計模式系列(08):創建型模式 - 原型模式

系列導讀&#xff1a;完成創建型模式的學習&#xff0c;我們來看最后一個創建型模式——原型模式。它通過復制已有對象來創建新對象&#xff0c;是一種獨特的創建方式。 解決什么問題&#xff1a;通過復制現有對象來創建新對象&#xff0c;而不是重新實例化。適用于對象創建成本…

區塊鏈到底是什么?

區塊鏈本質上是一種去中心化的分布式賬本技術&#xff0c;具有以下核心特點&#xff1a; - 去中心化&#xff1a;沒有中央管理機構&#xff0c;數據由網絡中的多個節點共同維護&#xff0c;比如比特幣網絡中各個節點都保存著完整賬本。 - 分布式存儲&#xff1a;數據不是存在一…