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