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. 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).