Compatibilidad con cargador de arranque MTE, compatibilidad con cargador de arranque MTE

Android 13 introduce una ABI para que el espacio de usuario comunique el modo MTE solicitado al gestor de arranque. Esto se puede usar para habilitar MTE en dispositivos que tienen soporte de hardware pero que no se envían con MTE habilitado de forma predeterminada, o para deshabilitar MTE en dispositivos que sí se envían con él.

Soporte de cargador de arranque

Para admitir esta ABI, su gestor de arranque debe leer misc_memtag_message (definido en bootloader_message.h ) de la partición misc . Si se encuentra un misc_memtag_message válido ( MISC_VIRTUAL_AB_MAGIC_HEADER coincide y el número de versión es compatible), el gestor de arranque calcula

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 la configuración predeterminada de activación/desactivación de memtag para el SKU. Si memtag es verdadero, el gestor de arranque configura la reserva de etiquetas MTE, habilita las comprobaciones de etiquetas en los niveles de excepción inferiores y comunica la región reservada de etiquetas al kernel a través de DT. Si memtag es falso, el gestor de arranque agrega arm64.nomte a la línea de comando del kernel.

Si memtag_kernel es verdadero, el gestor de arranque agrega kasan=on a la línea de comando del kernel.

El gestor de arranque DEBE borrar MISC_MEMTAG_MODE_MEMTAG_ONCE y MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE en cada arranque.

Si el gestor de arranque admite fastboot oem mte , entonces activa MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} en (1, 0, 0) y desactiva en (0, 0, 1) , conservando los otros indicadores.

Debe configurar su producto para crear el binario mtectrl para soporte de espacio de usuario. Luego, configure la propiedad del sistema ro.arm64.memtag.bootctl_supported para indicar al sistema que su gestor de arranque admite el mensaje memtag.

Interfaz de usuario

Cuando se establece la propiedad ro.arm64.memtag.bootctl_supported , un botón en el menú Opciones de desarrollador permite al usuario reiniciar una vez con MTE habilitado. El público objetivo de esto son los desarrolladores de aplicaciones que desean probar sus aplicaciones con MTE. Captura de pantalla de la opción de desarrollador MTE.

Propiedad del sistema

Para 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 MTE en el espacio de usuario (establece MISC_MEMTAG_MODE_MEMTAG )
  • memtag-once: habilita MTE de espacio de usuario una vez (establece MISC_MEMTAG_MODE_MEMTAG_ONCE )
  • memtag-kernel: habilita MTE del espacio del kernel (establece MISC_MEMTAG_MODE_MEMTAG_KERNEL )
  • memtag-kernel-once: habilita MTE del espacio del núcleo una vez ( MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE )
  • memtag-off: deshabilitar MTE (establecer MISC_MEMTAG_MODE_MEMTAG_OFF )

Es necesario reiniciar el sistema para que la nueva configuración surta efecto (tal como la aplica el gestor de arranque).