Поддержка загрузчика MTE, поддержка загрузчика 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 — это параметр включения/выключения мемтега по умолчанию для 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 )

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

,

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 — это параметр включения/выключения мемтега по умолчанию для 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 )

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