Поддержка загрузчика 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

Рисунок 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 ).

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