MTE 系統啟動載入程式支援

Android 13 為使用者空間引進 ABI,以便將要求的 MTE 模式傳達至引導程式。您可以使用這個 flag,在支援硬體但未預設啟用 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 附加至核心指令列。

開機載入程式必須在每次開機時清除 MISC_MEMTAG_MODE_MEMTAG_ONCEMISC_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 開發人員選項的螢幕截圖。

系統屬性

如要進行進階使用,系統屬性 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)

系統必須重新啟動,新設定才會生效 (因為是由啟動載入程式套用)。