Поддержка загрузчика MTE

В 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. Скриншот варианта разработчика 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 )

Систему необходимо перезагрузить, чтобы новые настройки вступили в силу (так как они применяются загрузчиком).