In Android 13 wird ein ABI für den Nutzerbereich eingeführt, um den angeforderten MTE-Modus an den Bootloader zu kommunizieren. Damit können Sie MTE auf Geräten aktivieren, die Hardwareunterstützung dafür bieten, aber standardmäßig nicht mit aktiviertem MTE ausgeliefert werden, oder MTE auf Geräten deaktivieren, die damit ausgeliefert werden.
Bootloader-Unterstützung
Zur Unterstützung dieses ABI muss der Bootloader die misc_memtag_message (definiert in
bootloader_message.h) aus der misc-Partition lesen.
Wenn ein gültiges misc_memtag_message gefunden wird (MISC_MEMTAG_MAGIC_HEADER stimmt überein und die Versionsnummer wird unterstützt), berechnet der Bootloader Folgendes:
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 ist die Standardeinstellung für das Ein- oder Ausschalten von Memtags für die Artikelnummer. Wenn memtag true ist, richtet der Bootloader die MTE-Tag-Reservierung ein, aktiviert Tag-Prüfungen in den unteren Ausnahmeebenen und teilt dem Kernel die reservierte Tag-Region über den Gerätebaum (Device Tree, DT) mit. Wenn memtag false ist, hängt der Bootloader arm64.nomte an die Kernel-Befehlszeile an.
Wenn memtag_kernel true ist, hängt der Bootloader kasan=on an die Kernel-Befehlszeile an. Andernfalls wird kasan=off angehängt.
Der Bootloader muss MISC_MEMTAG_MODE_MEMTAG_ONCE und MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE bei jedem Start löschen.
Wenn der Bootloader fastboot oem mte unterstützt, sollten mit dem Argument „on“ die MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}-Flags auf (1, 0, 0) gesetzt werden. Mit dem Argument „off“ sollten sie auf (0, 0, 1) gesetzt werden, während die anderen Flags beibehalten werden.
Konfigurieren Sie Ihr Produkt so, dass die mtectrl-Binärdatei für die Unterstützung des Nutzerbereichs erstellt wird.
Legen Sie dann das Systemattribut ro.arm64.memtag.bootctl_supported fest, um dem System mitzuteilen, dass Ihr Bootloader die memtag-Nachricht unterstützt.
Benutzeroberfläche
Wenn die Eigenschaft ro.arm64.memtag.bootctl_supported festgelegt ist, können Sie über die Option Mit MTE neu starten im Menü Entwickleroptionen einmal mit aktiviertem MTE neu starten. Die Zielgruppe für diesen Artikel sind App-Entwickler, die ihre Apps mit MTE testen möchten.

Abbildung 1: MTE-Entwickleroption
Systemattribut
Für die erweiterte Verwendung kann die Systemeigenschaft arm64.memtag.bootctl eine durch Kommas getrennte Liste der folgenden Werte enthalten:
-
memtagaktiviert MTE im Nutzerbereich dauerhaft (setMISC_MEMTAG_MODE_MEMTAG). -
memtag-onceaktiviert User-Space-MTE einmal (setMISC_MEMTAG_MODE_MEMTAG_ONCE). -
memtag-kernelaktiviert MTE im Kernel-Space (MISC_MEMTAG_MODE_MEMTAG_KERNELfestlegen). -
memtag-kernel-onceaktiviert MTE im Kernel-Space einmal (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCEwird festgelegt). -
memtag-offdeaktiviert MTE (setMISC_MEMTAG_MODE_MEMTAG_OFF).
Die Einstellung wird vom Bootloader angewendet. Starten Sie das System daher nach einer Änderung neu.