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

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

опция разработчика 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 ).

Эти настройки применяются загрузчиком, поэтому после внесения изменений перезагрузите систему.