Prise en charge du chargeur de démarrage MTE

Android 13 introduit un ABI pour l'espace utilisateur afin de communiquer le mode MTE demandé au chargeur de démarrage. Cela peut être utilisé pour activer MTE sur les appareils dotés d'un support matériel mais qui ne sont pas livrés avec MTE activé par défaut, ou pour désactiver MTE sur les appareils qui l'accompagnent.

Prise en charge du chargeur de démarrage

Pour prendre en charge cet ABI, votre chargeur de démarrage 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 que le numéro de version est pris en charge), le chargeur de démarrage 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/désactivation du memtag par défaut pour le SKU. Si memtag est vrai, le chargeur de démarrage configure la réservation de balises MTE, active les vérifications de balises dans les niveaux d'exception inférieurs et communique la région réservée aux balises au noyau via DT. Si memtag est faux, le chargeur de démarrage ajoute arm64.nomte à la ligne de commande du noyau.

Si memtag_kernel est vrai, le chargeur de démarrage ajoute kasan=on à la ligne de commande du noyau.

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

Si le chargeur de démarrage prend en charge fastboot oem mte , alors on définit MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} sur (1, 0, 0) et off sur (0, 0, 1) , tout en préservant les autres indicateurs.

Vous devez configurer votre produit pour créer le binaire mtectrl pour la prise en charge de l'espace utilisateur. Ensuite, définissez la propriété système ro.arm64.memtag.bootctl_supported pour indiquer au système que votre chargeur de démarrage prend en charge le message memtag.

Interface utilisateur

Lorsque la propriété ro.arm64.memtag.bootctl_supported est définie, un bouton dans le menu Options du développeur permet à l'utilisateur de redémarrer une fois avec MTE activé. Le public cible est constitué des développeurs d’applications qui souhaitent tester leurs applications avec MTE. Capture d'écran de l'option développeur MTE.

Propriété système

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

  • memtag : activer de manière persistante le MTE de l'espace utilisateur (définir MISC_MEMTAG_MODE_MEMTAG )
  • memtag-once : activez le MTE de l'espace utilisateur une fois (définissez MISC_MEMTAG_MODE_MEMTAG_ONCE )
  • memtag-kernel : activer le MTE dans l'espace noyau (définir MISC_MEMTAG_MODE_MEMTAG_KERNEL )
  • memtag-kernel-once : activez le MTE dans l'espace noyau une fois ( MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE )
  • memtag-off : désactiver MTE (définir MISC_MEMTAG_MODE_MEMTAG_OFF )

Le système doit être redémarré pour que le nouveau paramètre prenne effet (tel qu'il est appliqué par le chargeur de démarrage).