MTE 系統啟動載入程式支援

Android 13 推出了 ABI,讓使用者空間中通訊所要求的 啟動載入程式的 MTE 模式。這可用於在符合下列條件的裝置上啟用 MTE 支援硬體,但出貨時無法預設啟用 MTE。 請在搭載此應用程式的裝置上停用 MTE。

系統啟動載入程式支援

如要支援這個 ABI,您的系統啟動載入程式必須讀取 misc_memtag_message (定義位置: misc 分區啟動 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 為 true,則系統啟動載入程式會設定 MTE 代碼 並在較低層級啟用代碼檢查功能 透過 DT 將標記保留區域傳送給核心。如果 memtag 為 false,系統啟動載入程式會將 arm64.nomte 附加至 核心指令列

如果 memtag_kernel 為 true,則系統啟動載入程式會附加 kasan=on 新增至核心指令列。

系統啟動載入程式「必須」清除 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 系統屬性來表示 與您的系統建立連結。

使用者介面

設定 ro.arm64.memtag.bootctl_supported 屬性時, 「Developer Options」選單中的按鈕可讓使用者透過 MTE 重新啟動一次 此目標對象的目標對像是想測試的應用程式開發人員 透過 MTE 開發應用程式 MTE 開發人員選項的螢幕截圖。

系統屬性

進階用途 arm64.memtag.bootctl 可以使用 下列值:

  • memtag:持續啟用使用者空間 MTE (設定 MISC_MEMTAG_MODE_MEMTAG)
  • memtag-on1:啟用一次使用者空間 MTE (設定 MISC_MEMTAG_MODE_MEMTAG_ONCE)
  • memtag-kernel:啟用 kernel-space MTE (設定 MISC_MEMTAG_MODE_MEMTAG_KERNEL)
  • memtag-kernel-once:啟用一次 kernel-space MTE 一次 (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)。
  • memtag-off:停用 MTE (設定 MISC_MEMTAG_MODE_MEMTAG_OFF)

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