自 2025 年 3 月 27 日起,我們建議您使用 android-latest-release
而非 aosp-main
建構及貢獻 AOSP。詳情請參閱「Android 開放原始碼計畫變更」。
MTE 系統啟動載入程式支援
透過集合功能整理內容
你可以依據偏好儲存及分類內容。
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
)
系統必須重新啟動,新設定才會生效 (因為是由開機載入器套用)。
這個頁面中的內容和程式碼範例均受《內容授權》中的授權所規範。Java 與 OpenJDK 是 Oracle 和/或其關係企業的商標或註冊商標。
上次更新時間:2025-08-23 (世界標準時間)。
[[["容易理解","easyToUnderstand","thumb-up"],["確實解決了我的問題","solvedMyProblem","thumb-up"],["其他","otherUp","thumb-up"]],[["缺少我需要的資訊","missingTheInformationINeed","thumb-down"],["過於複雜/步驟過多","tooComplicatedTooManySteps","thumb-down"],["過時","outOfDate","thumb-down"],["翻譯問題","translationIssue","thumb-down"],["示例/程式碼問題","samplesCodeIssue","thumb-down"],["其他","otherDown","thumb-down"]],["上次更新時間:2025-08-23 (世界標準時間)。"],[],[],null,["# MTE bootloader support\n\nAndroid 13 introduces an ABI for user-space to communicate the requested\nMTE mode to the bootloader. This can be used to enable MTE on devices that\nhave hardware support but do not ship with MTE enabled by default, or to\ndisable MTE on devices that do ship with it.\n\nBootloader support\n------------------\n\n\nTo support this ABI, your bootloader needs to read the\n`misc_memtag_message` (defined in\n[bootloader_message.h](https://android.googlesource.com/platform/bootable/recovery/+/android16-release/bootloader_message/include/bootloader_message/bootloader_message.h)) from the `misc` partition.\nIf a valid `misc_memtag_message` is found\n(`MISC_VIRTUAL_AB_MAGIC_HEADER` matches, and the version number is supported),\nthe bootloader computes \n\n```\nmemtag = (default_memtag && !(misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_OFF)) ||\n misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG ||\n misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_ONCE\n\nmemtag_kernel = misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL ||\n misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE\n```\n\n\n`default_memtag` is the default memtag on/off setting for the\nSKU. If `memtag` is true, the bootloader sets up MTE tag\nreservation, enables tag checks in the lower exception levels, and\ncommunicates the tag reserved region to the kernel via DT. If\n`memtag` is false, the bootloader appends arm64.nomte to the\nkernel command line.\n\n\nIf `memtag_kernel` is true, the bootloader appends\n`kasan=on` to the kernel command line. Otherwise, it\nappends `kasan=off`.\n\n\nBootloader **MUST** clear `MISC_MEMTAG_MODE_MEMTAG_ONCE` and\n`MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE` on every boot.\n\n\nIf the bootloader supports `fastboot oem mte`, then on sets\n`MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}` to\n`(1, 0, 0)`, and off to `(0, 0, 1)`, while\npreserving the other flags.\n\n\nYou should configure your product to build the `mtectrl` binary\nfor userspace support. Then, set the\n`ro.arm64.memtag.bootctl_supported` system property to indicate\nto the system that your bootloader supports the memtag message.\n\nUser interface\n--------------\n\nWhen the `ro.arm64.memtag.bootctl_supported` property is set, a button in the Developer Options menu allows the user to reboot once with MTE enabled. The target audience for this is app developers that want to test their apps with MTE.\n\nSystem property\n---------------\n\n\nFor advanced use, the system property\n`arm64.memtag.bootctl` can take a comma-separated list of the\nfollowing values:\n\n- **memtag:** persistenly enable user-space MTE (set `MISC_MEMTAG_MODE_MEMTAG`)\n- **memtag-once:** enable user-space MTE once (set `MISC_MEMTAG_MODE_MEMTAG_ONCE`)\n- **memtag-kernel:** enable kernel-space MTE (set `MISC_MEMTAG_MODE_MEMTAG_KERNEL`)\n- **memtag-kernel-once:** enable kernel-space MTE once (`MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE`)\n- **memtag-off:** disable MTE (set `MISC_MEMTAG_MODE_MEMTAG_OFF`)\n\n\nThe system has to be rebooted for the new setting to take effect (as it is\napplied by the bootloader)."]]