2025 年 3 月 27 日より、AOSP のビルドとコントリビューションには aosp-main
ではなく android-latest-release
を使用することをおすすめします。詳細については、AOSP の変更をご覧ください。
MTE ブートローダーのサポート
コレクションでコンテンツを整理
必要に応じて、コンテンツの保存と分類を行います。
Android 13 には、リクエストされた MTE モードをブートローダーに伝えるユーザー空間用の ABI が導入されています。これを使用すると、ハードウェアはサポートされているがデフォルトでは初期設定で MTE が有効になっていないデバイスで MTE を有効にしたり、逆に初期設定で MTE が有効になっているデバイスで MTE を無効にしたりできます。
ブートローダーのサポート
この ABI をサポートするには、ブートローダーが misc
パーティションから(bootloader_message.h で定義されている)misc_memtag_message
を読み取る必要があります。
有効な 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_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 を有効にした状態で 1 回再起動できます。この場合の対象ユーザーは、MTE でアプリをテストするアプリ デベロッパーです。
システム プロパティ
高度な使い方として、システム プロパティ arm64.memtag.bootctl
は次の値からなるカンマ区切りのリストを取得できます。
-
memtag: ユーザー空間の MTE を永続的に有効にする(
MISC_MEMTAG_MODE_MEMTAG
を設定)
-
memtag-once: ユーザー空間の MTE を 1 回有効にする(
MISC_MEMTAG_MODE_MEMTAG_ONCE
を設定)
-
memtag-kernel: カーネル空間の MTE を有効にする(
MISC_MEMTAG_MODE_MEMTAG_KERNEL
を設定)
-
memtag-kernel-once: カーネル空間の MTE を 1 回有効にする(
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
を設定)
-
memtag-off: MTE を無効にする(
MISC_MEMTAG_MODE_MEMTAG_OFF
を設定)
新しい設定はブートローダーによって適用されるため、有効にするにはシステムを再起動する必要があります。
このページのコンテンツやコードサンプルは、コンテンツ ライセンスに記載のライセンスに従います。Java および OpenJDK は Oracle および関連会社の商標または登録商標です。
最終更新日 2025-07-27 UTC。
[[["わかりやすい","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-07-27 UTC。"],[],[],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)."]]