В Android 13 представлен ABI для пользовательского пространства, позволяющий загружать запрошенный режим MTE. Это можно использовать для включения MTE на устройствах, поддерживающих MTE на аппаратном уровне, но не имеющих его по умолчанию, или для отключения MTE на устройствах, которые его поддерживают.
поддержка загрузчика
Для поддержки этого ABI ваш загрузчик должен прочитать сообщение misc_memtag_message (определенное в bootloader_message.h ) из раздела misc . Если найдено допустимое misc_memtag_message (соответствует MISC_MEMTAG_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 определяет, включена или выключена функция memtag по умолчанию для данного SKU. Если 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 , аргумент 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.

Рисунок 1. Варианты настроек разработчика 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).
Эти настройки применяются загрузчиком, поэтому после внесения изменений перезагрузите систему.