MTE 引導加載程序支持

Android 13 引入了使用者空間 ABI,用於將請求的 MTE 模式傳達給引導程式。這可用於在具有硬體支援但預設情況下未啟用 MTE 的裝置上啟用 MTE,或在附帶硬體支援的裝置上停用 MTE。

引導程式支持

為了支援此ABI,您的開機載入程式需要從misc分割區讀取misc_memtag_message (在bootloader_message.h中定義)。如果找到有效的misc_memtag_messageMISC_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_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

必須重新啟動系統才能使新設定生效(因為它是由引導程式應用的)。