В 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
к командной строке ядра.
Загрузчик ДОЛЖЕН очищать 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
)
Систему необходимо перезагрузить, чтобы новые настройки вступили в силу (так как они применяются загрузчиком).