Compatibilité avec le bootloader MTE

Android 13 introduit une ABI pour que l'espace utilisateur communique le mode MTE demandé au bootloader. Vous pouvez l'utiliser pour activer MTE sur les appareils qui sont compatibles avec cette fonctionnalité, mais qui ne l'ont pas activée par défaut, ou pour désactiver MTE sur les appareils qui l'ont activée.

Compatibilité avec le bootloader

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

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 par défaut pour activer ou désactiver les memtags 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 dans les niveaux d'exception inférieurs et communique la région réservée aux tags au noyau avec le DT (devicetree). Si memtag est défini sur false, le bootloader ajoute arm64.nomte à la ligne de commande du noyau.

Si memtag_kernel est défini sur true, le bootloader ajoute kasan=on à la ligne de commande du noyau. Sinon, il ajoute kasan=off.

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, l'argument "on" doit définir les indicateurs MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} sur (1, 0, 0), et l'argument "off" doit les définir sur (0, 0, 1), tout en conservant les autres indicateurs.

Configurez votre produit pour créer le binaire mtectrl pour la prise en charge de 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, l'option Redémarrer avec MTE du menu Options pour les développeurs vous permet 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.

Option pour les développeurs MTE

Figure 1. Option pour les développeurs MTE.

Propriété système

Pour une utilisation avancée, la propriété système arm64.memtag.bootctl peut prendre une liste de valeurs séparées par une virgule parmi les suivantes :

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

Le paramètre est appliqué par le bootloader. Redémarrez donc le système après avoir effectué une modification.