Compatibilidad con el bootloader de MTE

Android 13 introduce una ABI para que el espacio de usuario comunique el modo de MTE solicitado al bootloader. Puedes usarlo para habilitar MTE en dispositivos que tienen compatibilidad con hardware, pero no se envían con MTE habilitada de forma predeterminada, o para inhabilitar MTE en dispositivos que sí se envían con ella.

Compatibilidad con el bootloader

Para admitir esta ABI, tu cargador de arranque debe leer el misc_memtag_message (definido en bootloader_message.h) desde la partición misc. Si se encuentra un misc_memtag_message válido (MISC_MEMTAG_MAGIC_HEADER coincide y se admite el número de versión), el bootloader realiza el siguiente cálculo:

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 es el parámetro de configuración predeterminado de activación o desactivación de la etiqueta de memoria para el SKU. Si memtag es true, el bootloader configura la reserva de etiquetas de MTE, habilita las verificaciones de etiquetas en los niveles de excepción más bajos y comunica la región reservada de etiquetas al kernel con el árbol de dispositivos (DT). Si memtag es false, el bootloader agrega arm64.nomte a la línea de comandos del kernel.

Si memtag_kernel es true, el bootloader agrega kasan=on a la línea de comandos del kernel. De lo contrario, agrega kasan=off.

El cargador de arranque debe borrar MISC_MEMTAG_MODE_MEMTAG_ONCE y MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE en cada arranque.

Si el bootloader admite fastboot oem mte, el argumento on debe establecer las marcas MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} en (1, 0, 0), y el argumento off debe establecerlas en (0, 0, 1), sin modificar las demás marcas.

Configura tu producto para compilar el objeto binario mtectrl para la compatibilidad con el espacio del usuario. Luego, configura la propiedad del sistema ro.arm64.memtag.bootctl_supported para indicarle al sistema que tu cargador de arranque admite el mensaje memtag.

Interfaz de usuario

Cuando se establece la propiedad ro.arm64.memtag.bootctl_supported, la opción Reboot with MTE en el menú Opciones para desarrolladores te permite reiniciar una vez con MTE habilitado. El público objetivo son los desarrolladores de apps que desean probar sus apps con MTE.

Opción para desarrolladores de MTE

Figura 1: Es una opción para desarrolladores de MTE.

Propiedad del sistema

Para un uso avanzado, la propiedad del sistema arm64.memtag.bootctl puede tomar una lista separada por comas de los siguientes valores:

  • memtag habilita de forma persistente el MTE del espacio del usuario (establece MISC_MEMTAG_MODE_MEMTAG).
  • memtag-once habilita la MTE del espacio del usuario una vez (establece MISC_MEMTAG_MODE_MEMTAG_ONCE).
  • memtag-kernel habilita el MTE en el espacio del kernel (establece MISC_MEMTAG_MODE_MEMTAG_KERNEL).
  • memtag-kernel-once habilita la MTE en el espacio del kernel una vez (establece MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE).
  • memtag-off inhabilita MTE (establece MISC_MEMTAG_MODE_MEMTAG_OFF).

El bootloader aplica el parámetro de configuración, por lo que debes reiniciar el sistema después de realizar un cambio.