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

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

Soporte de cargador de arranque

Para admitir esta ABI, su cargador de arranque necesita 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 de activación/desactivación de memtag predeterminada para el SKU. Si memtag es verdadero, el cargador de arranque configura la reserva de etiquetas MTE, habilita las comprobaciones de etiquetas en los niveles de excepción más bajos y comunica la región reservada de etiquetas al kernel a través de DT. Si memtag es falso, el cargador 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 es compatible con fastboot oem mte , on establece MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} en (1, 0, 0) y off en (0, 0, 1) , conservando los demás indicadores.

Debe configurar su producto para construir el binario mtectrl para el soporte del espacio de usuario. Luego, configure la propiedad del sistema ro.arm64.memtag.bootctl_supported para indicarle al sistema que su cargador de arranque admite el mensaje de 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: habilitar persistentemente MTE en el espacio de usuario (establecer MISC_MEMTAG_MODE_MEMTAG )
  • memtag-once: habilite el espacio de usuario MTE una vez (establezca MISC_MEMTAG_MODE_MEMTAG_ONCE )
  • memtag-kernel: habilitar kernel-space MTE (establecer MISC_MEMTAG_MODE_MEMTAG_KERNEL )
  • memtag-kernel-once: habilitar kernel-space MTE una vez ( MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE )
  • memtag-off: deshabilitar MTE (establecer MISC_MEMTAG_MODE_MEMTAG_OFF )

El sistema debe reiniciarse para que la nueva configuración surta efecto (tal como la aplica el gestor de arranque).