MTE-Bootloader-Unterstützung

Android 13 führt ein ABI für den User-Space ein, um dem Bootloader den angeforderten MTE-Modus mitzuteilen. Dies kann verwendet werden, um MTE auf Geräten zu aktivieren, die über Hardwareunterstützung verfügen, MTE jedoch nicht standardmäßig aktiviert ausliefern, oder um MTE auf Geräten zu deaktivieren, die damit ausgeliefert werden.

Bootloader-Unterstützung

Um diese ABI zu unterstützen, muss Ihr Bootloader die misc_memtag_message (definiert in bootloader_message.h ) von der misc Partition lesen. Wenn eine gültige 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 standardmäßige Memtag-Ein/Aus-Einstellung für die SKU. Wenn memtag wahr ist, richtet der Bootloader die MTE-Tag-Reservierung ein, aktiviert Tag-Prüfungen in den unteren Ausnahmeebenen und kommuniziert den Tag-reservierten Bereich über DT an den Kernel. Wenn memtag falsch ist, hängt der Bootloader arm64.nomte an die Kernel-Befehlszeile an.

Wenn memtag_kernel wahr ist, hängt der Bootloader kasan=on an die Kernel-Befehlszeile an.

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, setzt on MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} auf (1, 0, 0) und off auf (0, 0, 1) , während die anderen Flags erhalten bleiben.

Sie sollten Ihr Produkt so konfigurieren, dass es die mtectrl Binärdatei für die Userspace-Unterstützung erstellt. Legen Sie dann die Systemeigenschaft ro.arm64.memtag.bootctl_supported fest, um dem System anzuzeigen, dass Ihr Bootloader die Memtag-Nachricht unterstützt.

Benutzeroberfläche

Wenn die Eigenschaft ro.arm64.memtag.bootctl_supported “ festgelegt ist, ermöglicht eine Schaltfläche im Menü „Entwickleroptionen“ dem Benutzer einen einmaligen Neustart mit aktiviertem MTE. Zielgruppe hierfür sind App-Entwickler, die ihre Apps mit MTE testen möchten. Screenshot der MTE-Entwickleroption.

Systemeigenschaft

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

  • memtag: User-Space-MTE dauerhaft aktivieren ( MISC_MEMTAG_MODE_MEMTAG festlegen)
  • memtag-once: User-Space-MTE einmalig aktivieren ( MISC_MEMTAG_MODE_MEMTAG_ONCE festlegen)
  • memtag-kernel: Kernel-Space-MTE aktivieren ( MISC_MEMTAG_MODE_MEMTAG_KERNEL festlegen)
  • memtag-kernel-once: Kernel-Space-MTE 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).