MTE-Bootloader-Unterstützung

In Android 13 wird ein ABI für den Nutzerbereich eingeführt, um den angeforderten MTE-Modus an den Bootloader zu kommunizieren. Damit kann MTE auf Geräten aktiviert werden, die Hardwareunterstützung dafür bieten, aber standardmäßig nicht mit aktiviertem MTE ausgeliefert werden. Außerdem kann MTE auf Geräten deaktiviert werden, die damit ausgeliefert werden.

Bootloader-Unterstützung

Zur Unterstützung dieses ABI muss Ihr Bootloader misc_memtag_message (definiert in bootloader_message.h) aus der Partition misc lesen. Wenn ein gültiges misc_memtag_message gefunden wird (MISC_VIRTUAL_AB_MAGIC_HEADER stimmt überein und die Versionsnummer wird unterstützt), berechnet der Bootloader

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- und Ausschalten von Memtags für die Artikelnummer. Wenn memtag auf „true“ gesetzt ist, richtet der Bootloader die MTE-Tag-Reservierung ein, aktiviert Tag-Prüfungen auf den unteren Ausnahmeebenen und teilt dem Kernel die reservierte Tag-Region über den Gerätebaum (Device Tree, DT) mit. Wenn memtag auf „false“ gesetzt 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, wird MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} auf (1, 0, 0) und (0, 0, 1) gesetzt, während die anderen Flags beibehalten werden.

Sie sollten Ihr Produkt so konfigurieren, 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 Nutzer über eine Schaltfläche im Menü „Entwickleroptionen“ einmal mit aktiviertem MTE neu starten. Die Zielgruppe sind App-Entwickler, die ihre Apps mit MTE testen möchten. Screenshot der Entwickleroption für MTE

Systemattribut

Für die erweiterte Verwendung kann die Systemeigenschaft arm64.memtag.bootctl eine durch Kommas getrennte Liste der folgenden Werte enthalten:

  • memtag: MTE im Nutzerbereich dauerhaft aktivieren (MISC_MEMTAG_MODE_MEMTAG festlegen)
  • memtag-once:Aktiviert MTE im Nutzerbereich einmalig (setzt MISC_MEMTAG_MODE_MEMTAG_ONCE).
  • memtag-kernel:MTE im Kernel-Bereich aktivieren (set MISC_MEMTAG_MODE_MEMTAG_KERNEL)
  • memtag-kernel-once:MTE im Kernel-Bereich einmal aktivieren (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)
  • memtag-off:MTE deaktivieren (MISC_MEMTAG_MODE_MEMTAG_OFF festlegen)

Das System muss neu gestartet werden, damit die neue Einstellung wirksam wird, da sie vom Bootloader angewendet wird.