MTE Bootloader 支持,MTE Bootloader 支持

Android 13 為用戶空間引入了 ABI,以將請求的 MTE 模式傳達給引導加載程序。這可用於在具有硬件支持但未默認啟用 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 開/關設置。如果memtag為真,則引導加載程序設置 MTE 標記保留,在較低的異常級別中啟用標記檢查,並通過 DT 將標記保留區域傳達給內核。如果memtag為 false,則引導加載程序將 arm64.nomte 附加到內核命令行。

如果memtag_kernel為真,則引導加載程序將kasan=on附加到內核命令行。

Bootloader必須在每次啟動時清除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

必須重新啟動系統才能使新設置生效(因為它由引導加載程序應用)。

,

Android 13 為用戶空間引入了 ABI,以將請求的 MTE 模式傳達給引導加載程序。這可用於在具有硬件支持但未默認啟用 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 開/關設置。如果memtag為真,則引導加載程序設置 MTE 標記保留,在較低的異常級別中啟用標記檢查,並通過 DT 將標記保留區域傳達給內核。如果memtag為 false,則引導加載程序將 arm64.nomte 附加到內核命令行。

如果memtag_kernel為真,則引導加載程序將kasan=on附加到內核命令行。

Bootloader必須在每次啟動時清除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

必須重新啟動系統才能使新設置生效(因為它由引導加載程序應用)。