Поддержка загрузчика 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 к командной строке ядра. В противном случае он добавляет 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.

Системное свойство

Для расширенного использования системное свойство 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 )

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