Android 13 introduit une ABI pour que l'espace utilisateur communique le mode MTE demandé au bootloader. Cela peut être utilisé pour activer MTE sur les appareils qui sont compatibles avec le matériel, mais qui ne sont pas fournis avec MTE activé par défaut, ou pour désactiver MTE sur les appareils qui sont fournis avec.
Compatibilité avec le bootloader
Pour prendre en charge cet 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
correspondances et numéro de version 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 par défaut (activé/désactivé) de la balise de 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 dans les 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 noyau. Sinon, il ajoute kasan=off
.
Le chargeur d'amorçage 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
, il définit MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}
sur (1, 0, 0)
et (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é. Ce tutoriel s'adresse aux 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 de valeurs séparées par une virgule parmi les suivantes :
-
memtag: persistenly enable user-space MTE (set
MISC_MEMTAG_MODE_MEMTAG
) -
memtag-once : active MTE une seule fois dans l'espace utilisateur (définit
MISC_MEMTAG_MODE_MEMTAG_ONCE
) -
memtag-kernel : activer MTE dans l'espace du noyau (définir
MISC_MEMTAG_MODE_MEMTAG_KERNEL
) -
memtag-kernel-once: enable kernel-space MTE once
(
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
) -
memtag-off : désactive MTE (définit
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).