Compatibilité avec le bootloader MTE

Android 13 introduit une ABI pour l'espace utilisateur afin de communiquer le mode MTE demandé au bootloader. Vous pouvez l'utiliser pour activer MTE sur les appareils compatibles avec le matériel, mais qui ne sont pas livrés avec MTE activé par défaut, ou pour désactiver MTE sur les appareils qui le sont.

Compatibilité avec le bootloader

Pour prendre en charge cette ABI, votre bootloader doit lire le misc_memtag_message (défini dans bootloader_message.h) à partir de la partition misc. Si un misc_memtag_message valide est trouvé (MISC_VIRTUAL_AB_MAGIC_HEADER correspond et le numéro de version est compatible), le bootloader calcule

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 est le paramètre d'activation/de désactivation par défaut de la balise mémoire pour le SKU. Si memtag est défini sur "True", le bootloader configure la réservation de tags MTE, active les vérifications de tags aux niveaux d'exception inférieurs et communique la région réservée aux tags au noyau via DT. Si memtag est défini sur "false", le bootloader ajoute arm64.nomte à la ligne de commande du kernel.

Si memtag_kernel est défini sur "true", le bootloader ajoute kasan=on à la ligne de commande du kernel.

Le bootloader DOIT effacer MISC_MEMTAG_MODE_MEMTAG_ONCE et MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE à chaque démarrage.

Si le bootloader est compatible avec fastboot oem mte, la valeur MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} est définie sur (1, 0, 0) et la valeur "off" sur (0, 0, 1), tout en conservant les autres indicateurs.

Vous devez configurer votre produit pour compiler le binaire mtectrl afin de prendre en charge l'espace utilisateur. Définissez ensuite la propriété système ro.arm64.memtag.bootctl_supported pour indiquer au système que votre bootloader est compatible avec le message memtag.

Interface utilisateur

Lorsque la propriété ro.arm64.memtag.bootctl_supported est définie, un bouton du menu "Options pour les développeurs" permet à l'utilisateur de redémarrer une fois avec MTE activé. L'audience cible est constituée des développeurs d'applications qui souhaitent tester leurs applications avec MTE. Capture d'écran de l'option pour les développeurs MTE.

Propriété système

Pour une utilisation avancée, la propriété système arm64.memtag.bootctl peut accepter une liste séparée par une virgule des valeurs suivantes:

  • memtag:active de manière persistante la MTE dans l'espace utilisateur (définir MISC_MEMTAG_MODE_MEMTAG)
  • memtag-once:activez MTE dans l'espace utilisateur une seule fois (définissez MISC_MEMTAG_MODE_MEMTAG_ONCE).
  • memtag-kernel:activez MTE dans l'espace du noyau (définissez MISC_MEMTAG_MODE_MEMTAG_KERNEL).
  • memtag-kernel-once:activez MTE dans l'espace du noyau une fois (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE).
  • memtag-off:désactivez MTE (définissez MISC_MEMTAG_MODE_MEMTAG_OFF).

Le système doit être redémarré pour que le nouveau paramètre prenne effet (car il est appliqué par le bootloader).