Linux Mem -- 關于AArch64 MTE功能的疑問

目錄

1.虛擬地址和物理地址映射完成后,才可以設置虛擬地址對應的memory tag ?

2.各種memory allocator中的address tag從哪來,怎么產生?

2.1 vmalloc allocator

2.2 slub分配器

2.3 用戶可以指定IRG指令產生的address tag

3.kasan_unpoison? 標記的內存地址需要16byte對齊,該對齊由誰保證?

4.被標記過的內存,釋放時會執行哪些特定動作?


?

?????? 前面幾篇文章是在介紹為什么需要MTE功能、MTE功能邏輯和硬件實現。從這篇文件起,結合之前MTE邏輯和硬件實現,開始介紹MTE功能在軟件中的實現。首先我要通過調查推理回答自己的幾個問題。

1.虛擬地址和物理地址映射完成后,才可以設置虛擬地址對應的memory tag ?

?????????Documentation – Arm Developer 根據文章描述和文章中圖的示意,memory tag 是與16 字節的物理內存空間是關聯的,存放memory tag的tag storage空間大小取決于物理內存空間大小。而且通過調查發現:系統在設置por_mtu_tag_addr_base 寄存器時使用的物理地址

??????? 結合如上推斷例如指令 stg x0, [x0] 要設置x0[59 - 56]的address tag到[x0]對應的tag storage空間時,是在x0寄存器中的虛擬地址轉換為物理地址后,再找到物理地址在tag storage中對應的位置,最后將address tag做為memory tag存放到該對應空間。

??????? 按照如上邏輯:虛擬地址需要完成其和物理地址的映射后才可以設置或則讀取其對應的memory tag

????????從代碼邏輯也可以推斷此行為,如下代碼邏輯。首先進行虛擬空間分配,在進行虛擬和物理地址空間之間的映射,只有在虛擬和物理地址空間成功建立映射后才會對該內存空間進行unpoison操作(即標記該部分空間已分配)。

void *vm_map_ram(struct page **pages, unsigned int count, int node)
{unsigned long size = (unsigned long)count << PAGE_SHIFT;unsigned long addr;void *mem;//獲取虛擬地址空間if (likely(count <= VMAP_MAX_ALLOC)) {mem = vb_alloc(size, GFP_KERNEL);if (IS_ERR(mem))return NULL;addr = (unsigned long)mem;} else {struct vmap_area *va;va = alloc_vmap_area(size, PAGE_SIZE,VMALLOC_START, VMALLOC_END,node, GFP_KERNEL, VMAP_RAM,NULL);if (IS_ERR(va))return NULL;addr = va->va_start;mem = (void *)addr;}//建議虛擬空間和物理內存空間之間的映射if (vmap_pages_range(addr, addr + size, PAGE_KERNEL,pages, PAGE_SHIFT) < 0) {vm_unmap_ram(mem, count);return NULL;}/** Mark the pages as accessible, now that they are mapped.* With hardware tag-based KASAN, marking is skipped for* non-VM_ALLOC mappings, see __kasan_unpoison_vmalloc().*///MTE使能時,進行tag標記mem = kasan_unpoison_vmalloc(mem, size, KASAN_VMALLOC_PROT_NORMAL);return mem;
}
?

2.各種memory allocator中的address tag從哪來,怎么產生?

2.1 vmalloc allocator

????????以vmalloc分配器為例,從 __kasan_unpoison_vmalloc 函數可以獲知 address tag來自于kasan_random_tag函數,通過IRG指令產生。

2.2 slub分配器

????????從slab分配器可知,address tag同樣來自kasan_random_tag,由IRG指令產生。

2.3 用戶可以指定IRG指令產生的address tag

??????? 如前文《Linux Mem -- MTE in AArch64 Linux-CSDN博客》介紹用戶進程可以通過prctl(PR_SET_TAGGED_ADDR_CTRL, flags, 0, 0, 0)系統函數指定特定的tag值。其內核層相關代碼如下:

static void mte_update_gcr_excl(struct task_struct *task)
{/** SYS_GCR_EL1 will be set to current->thread.mte_ctrl value by* mte_set_user_gcr() in kernel_exit, but only if KASAN is enabled.*/if (kasan_hw_tags_enabled())return;// thread.mte_ctrl中的tag字段來自于用戶程序設定,即prctl(PR_SET_TAGGED_ADDR_CTRL)參數設定write_sysreg_s(((task->thread.mte_ctrl >> MTE_CTRL_GCR_USER_EXCL_SHIFT) &SYS_GCR_EL1_EXCL_MASK) | SYS_GCR_EL1_RRND,SYS_GCR_EL1);
}

????????Tag相關寄存器說明:

GCR_EL1 : tag control register , 用于控制IRG(隨機tag生成指令)生成tag值。
SYS_GCR_EL1_RRND : GCR_EL1.bit16? =? 1 表示使用指定tag值,即IRG生成的tag為特定值

3.kasan_unpoison? 標記的內存地址需要16byte對齊,該對齊由誰保證?

??????? 如上是slub分配器分配內存的函數片段。MTE使能時,arch_slab_minalign()函數獲取到的slub內存分配器最小對齊要求為MTE_GRANULE_SIZE(16字節,MTE對齊粒度)。因為系統內存分配器設置的對齊粒度最小為MTE_GRANULE_SIZE,所以獲取到的內存空間起始地址也為MTE_GRANULE_SIZE對齊,故kasan_unpoison函數執行時判讀入參object可以滿足MTE_GRANULE_SIZE對齊要求。

4.被標記過的內存,釋放時會執行哪些特定動作?

??????? 如上是slub分配器的free函數調用片段。此處只關注MTE功能的影響,上slub分配器的kfree函數,最終會調用到kasan_slab_free -->poison_slab_object函數。Poision_slab_object函數只會對釋放內存正確性和可訪問性進行判斷,如果正確、可訪問則將該內存區域標記為KASAN_SLAB_FREE(0xFE)便于后續該內存的再分配。否則調用kasan_report_invalid_free函數,上報kasan檢測異常。

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

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

相關文章

python-leetcode-顏色分類

75. 顏色分類 - 力扣&#xff08;LeetCode&#xff09; class Solution:def sortColors(self, nums: List[int]) -> None:"""Do not return anything, modify nums in-place instead."""low, mid, high 0, 0, len(nums) - 1while mid < h…

ArcGIS Pro技巧實戰:高效矢量化天地圖地表覆蓋圖

在地理信息系統&#xff08;GIS&#xff09;領域&#xff0c;地表覆蓋圖的矢量化是一項至關重要的任務。天地圖作為中國國家級的地理信息服務平臺&#xff0c;提供了豐富且詳盡的地表覆蓋數據。然而&#xff0c;這些數據通常以柵格格式存在&#xff0c;不利于進行空間分析和數據…

【江科大STM32】TIM輸出比較(學習筆記)

本章圖片文字內容也為重要知識&#xff0c;請馬住&#xff01; 輸出比較簡介 OC&#xff08;Output Compare&#xff09;輸出比較輸出比較可以通過比較CNT與CCR寄存器值的關系&#xff0c;來對輸出電平進行置1、置0或翻轉的操作&#xff0c;用于輸出一定頻率和占空比的PWM波形…

【網絡安全 | 漏洞挖掘】利用文件上傳功能的 IDOR 和 XSS 劫持會話

未經許可,不得轉載。 本文涉及漏洞均已修復。 文章目錄 前言正文前言 想象這樣一個場景:一個專門處理敏感文檔的平臺,如保險理賠或身份驗證系統,卻因一個設計疏漏而成為攻擊者的“金礦”。在對某個保險門戶的文件上傳功能進行測試時,我意外發現了一個可導致大規模賬戶接管…

飛算 JavaAI 如何讓微服務開發快人一步?

在當今競爭激烈的軟件開發領域&#xff0c;微服務架構因其靈活性和可擴展性備受青睞。然而&#xff0c;微服務開發過程復雜&#xff0c;從需求分析到最終代碼實現&#xff0c;每個環節都需要耗費大量時間和精力。飛算 JavaAI 的出現&#xff0c;猶如一道曙光&#xff0c;為開發…

Python—Excel全字段轉json文件(極速版+GUI界面打包)

目錄 專欄導讀1、背景介紹2、庫的安裝3、核心代碼4、完整代碼(簡易版)5、進階版(GUI)總結專欄導讀 ?? 歡迎來到Python辦公自動化專欄—Python處理辦公問題,解放您的雙手 ?????? 博客主頁:請點擊——> 一晌小貪歡的博客主頁求關注 ?? 該系列文章專欄:請點擊——…

2025年光電科學與智能傳感國際學術會議(ICOIS 2025)

重要信息 官網&#xff1a;www.ic-icois.org 時間&#xff1a;2025年3月14-16日 地點&#xff1a;中國-長春 簡介 2025年光電科學與智能傳感國際學術會議&#xff08;ICOIS 2025&#xff09;將于2025年3月14-16日在中國-長春隆重召開。會議將圍繞“光學光電”、“智能傳感”…

企業微信里可以使用的企業內刊制作工具,FLBOOK

如何讓員工及時了解公司動態、行業資訊、學習專業知識&#xff0c;并有效沉淀企業文化&#xff1f;一份高質量的企業內刊是不可或缺的。現在讓我來教你該怎么制作企業內刊吧 1.登錄與上傳 訪問FLBOOK官網&#xff0c;注冊賬號后上傳排版好的文檔 2.選擇模板 FLBOOK提供了豐富的…

YOLOv5 + SE注意力機制:提升目標檢測性能的實踐

一、引言 目標檢測是計算機視覺領域的一個重要任務&#xff0c;廣泛應用于自動駕駛、安防監控、工業檢測等領域。YOLOv5作為YOLO系列的最新版本&#xff0c;以其高效性和準確性在實際應用中表現出色。然而&#xff0c;隨著應用場景的復雜化&#xff0c;傳統的卷積神經網絡在處…

跟我學C++中級篇——定時器的設計

一、定時器 談到定時器&#xff0c;理論上講是各種語言和各種設計都無法避開的一個技術點。對于定時器來說&#xff0c;表面上就是一種時間間隔的處理約定&#xff0c;但對程序來說&#xff0c;可能就是設計層面、接口層面和庫或框架以及系統應用的一個大集合。不同的系統&…

智能機器人加速進化:AI大模型與傳感器的雙重buff加成

Deepseek不僅可以在手機里為你解答現在的困惑、占卜未來的可能&#xff0c;也將成為你的貼心生活幫手&#xff01; 2月21日&#xff0c;追覓科技旗下Dreamehome APP正式接入DeepSeek-R1大模型&#xff0c;2月24日發布的追覓S50系列掃地機器人也成為市面上首批搭載DeepSeek-R1的…

PostgreSQL10 邏輯復制實戰:構建高可用數據同步架構!

PostgreSQL10 邏輯復制實戰&#xff1a;打造高可用數據同步架構&#xff01; 概述 PostgreSQL 10 引入了邏輯復制&#xff08;Logical Replication&#xff09;&#xff0c;為數據庫高可用和數據同步提供了更靈活的選擇。PostgreSQL 復制機制主要分為物理復制和邏輯復制兩種&…

LVS+Keepalived高可用群集配置案例

以下是一個 LVSKeepalived 高可用群集配置案例&#xff1a; 1、環境準備 LVS 主調度器&#xff08;lvs1&#xff09;&#xff1a;IP 地址為 192.168.8.101&#xff0c;心跳 IP 為 192.168.4.101LVS 備調度器&#xff08;lvs2&#xff09;&#xff1a;IP 地址為 192.168.8.102…

原生家庭獨立的藝術:找到自我與家庭的平衡點

原生家庭獨立的藝術&#xff1a;找到自我與家庭的平衡點 &#x1f331; 引言 &#x1f308; 小林剛剛和父母結束了一次激烈的電話對峙。父母堅持認為他應該回到家鄉工作&#xff0c;“這樣我們也能照顧你”&#xff0c;而他則努力解釋自己在大城市的職業規劃。掛掉電話后&…

Java進階——注解一文全懂

Java注解&#xff08;Annotation&#xff09;是一種強大的元數據機制&#xff0c;為代碼提供了附加信息&#xff0c;能簡化配置、增強代碼的可讀性和可維護性。本文將深入探討 Java 注解的相關知識。首先闡述了注解的基礎概念&#xff0c;包括其本質、作用以及核心分類&#xf…

DeepSeek 15天指導手冊——從入門到精通 PDF(附下載)

DeepSeek使用教程系列--DeepSeek 15天指導手冊——從入門到精通pdf下載&#xff1a; https://pan.baidu.com/s/1PrIo0Xo0h5s6Plcc_smS8w?pwd1234 提取碼: 1234 或 https://pan.quark.cn/s/2e8de75027d3 《DeepSeek 15天指導手冊——從入門到精通》以系統化學習路徑為核心&…

【智能音頻新風尚】智能音頻眼鏡+FPC,打造極致聽覺享受!【新立電子】

智能音頻眼鏡&#xff0c;作為一款將時尚元素與前沿科技精妙融合的智能設備&#xff0c;這種將音頻技術與眼鏡形態完美結合的可穿戴設備&#xff0c;不僅解放了用戶的雙手&#xff0c;更為人們提供了一種全新的音頻交互體驗。新立電子FPC在智能音頻眼鏡中的應用&#xff0c;為音…

常用的 pip 命令

pip 是 Python 的包管理工具&#xff0c;可用于安裝、卸載、更新和管理 Python 包。以下是一些常用的 pip 命令&#xff1a; 1. 安裝包 安裝最新版本的包 pip install package_namepackage_name 是你要安裝的 Python 包的名稱&#xff0c;例如 pip install requests 可以安裝…

學習threejs,使用ShaderMaterial自定義著色器材質

&#x1f468;??? 主頁&#xff1a; gis分享者 &#x1f468;??? 感謝各位大佬 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;??? 收錄于專欄&#xff1a;threejs gis工程師 文章目錄 一、&#x1f340;前言1.1 ??THREE.ShaderMaterial1.1.1…

從暴力破解到時空最優:LeetCode算法設計核心思維解密

一、算法優化金字塔模型&#xff08;時間復雜度/空間復雜度協同優化&#xff09; 1.1 復雜度分析的本質 大O記號的三層認知&#xff1a; ① 理論復雜度邊界&#xff08;理想模型&#xff09; ② 硬件架構影響&#xff08;緩存命中率/分支預測&#xff09; ③ 語言特性損耗&am…