В 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.

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