Android 13 導入了使用者空間的 ABI,可向開機載入程式傳達要求的 MTE 模式。如果裝置支援 MTE,但預設未啟用,您可以使用這項工具啟用 MTE;如果裝置預設啟用 MTE,您也可以使用這項工具停用 MTE。
系統啟動載入程式支援
如要支援這個 ABI,系統啟動載入程式必須從 misc 分割區讀取 misc_memtag_message (定義於
bootloader_message.h)。如果找到有效的 misc_memtag_message (MISC_MEMTAG_MAGIC_HEADER 相符,且支援版本號碼),開機載入程式會進行下列運算:
memtag = (default_memtag && !(misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_OFF)) || misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG || misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_ONCE memtag_kernel = misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL || misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
default_memtag 是 SKU 的預設 memtag 開啟或關閉設定。如果 memtag 為 true,系統啟動載入程式會設定 MTE 標記預留項目,在較低的例外狀況層級啟用標記檢查,並透過裝置樹狀結構 (DT) 將標記預留區域傳達給核心。如果 memtag 為 false,系統啟動載入程式會將 arm64.nomte 附加至核心指令列。
如果 memtag_kernel 為 true,系統啟動載入程式會將 kasan=on 附加至核心指令列。否則,系統會附加 kasan=off。
開機載入程式必須在每次開機時清除 MISC_MEMTAG_MODE_MEMTAG_ONCE 和 MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE。
如果系統啟動載入程式支援 fastboot oem mte,則 on 引數應將 MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} 旗標設為 (1, 0, 0),而 off 引數應將旗標設為 (0, 0, 1),同時保留其他旗標。
設定產品,為使用者空間支援功能建構 mtectrl 二進位檔。
然後設定 ro.arm64.memtag.bootctl_supported 系統屬性,向系統指出啟動載入程式支援 memtag 訊息。
使用者介面
設定 ro.arm64.memtag.bootctl_supported 屬性後,您可以在「開發人員選項」選單中選取「使用 MTE 重新啟動」選項,啟用 MTE 並重新啟動一次。本文適用於想使用 MTE 測試應用程式的開發人員。

圖 1. MTE 開發人員選項。
系統屬性
如要進階使用,系統屬性 arm64.memtag.bootctl 可以採用以逗號分隔的下列值清單:
-
memtag持久啟用使用者空間 MTE (設定MISC_MEMTAG_MODE_MEMTAG)。 -
memtag-once啟用使用者空間 MTE 一次 (設定MISC_MEMTAG_MODE_MEMTAG_ONCE)。 -
memtag-kernel可啟用核心空間 MTE (設定MISC_MEMTAG_MODE_MEMTAG_KERNEL)。 -
memtag-kernel-once會啟用核心空間 MTE 一次 (設定MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)。 -
memtag-off會停用 MTE (設定MISC_MEMTAG_MODE_MEMTAG_OFF)。
這項設定是由開機載入程式套用,因此變更後請重新啟動系統。