Android 13 導入了使用者空間的 ABI,可向開機載入器傳達要求的 MTE 模式。這項功能可用於在硬體支援 MTE 但預設未啟用 MTE 的裝置上啟用 MTE,或在預設啟用 MTE 的裝置上停用 MTE。
系統啟動載入程式支援
如要支援這個 ABI,系統啟動載入程式必須從 misc
分割區讀取 misc_memtag_message
(定義於
bootloader_message.h)。如果找到有效的 misc_memtag_message
(MISC_VIRTUAL_AB_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
,請將 MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}
設為 (1, 0, 0)
,並將 (0, 0, 1)
設為關閉,同時保留其他標記。
您應設定產品,為使用者空間支援功能建構 mtectrl
二進位檔。然後設定 ro.arm64.memtag.bootctl_supported
系統屬性,向系統指出啟動載入程式支援 memtag 訊息。
使用者介面
設定ro.arm64.memtag.bootctl_supported
屬性後,使用者就能透過「開發人員選項」選單中的按鈕,重新啟動裝置並啟用 MTE。這項功能適用於想使用 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
)
系統必須重新啟動,新設定才會生效 (因為是由開機載入器套用)。