Supporto bootloader MTE

Android 13 introduce un'ABI per consentire allo spazio utente di comunicare MTE al bootloader. Può essere utilizzata per abilitare la funzionalità MTE sui dispositivi dispongono del supporto hardware ma non vengono forniti con la funzionalità MTE abilitata per impostazione predefinita, oppure a disattivare la funzionalità MTE sui dispositivi in dotazione.

Supporto del bootloader

Per supportare questa ABI, il bootloader deve leggere misc_memtag_message (definito in bootloader_message.h) dalla partizione misc. Se viene trovato un misc_memtag_message valido (MISC_VIRTUAL_AB_MAGIC_HEADER corrisponde e il numero di versione è supportato), il bootloader calcola

memtag = (default_memtag && !(misc.memtag_mode &MISC_MEMTAG_MODE_MEMTAG_OFF)) ||
      misc.memtag_mode e MISC_MEMTAG_MODE_MEMTAG ||
      misc.memtag_mode e MISC_MEMTAG_MODE_MEMTAG_ONCE

memtag_kernel = misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL ||
      misc.memtag_mode e MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE

default_memtag è l'impostazione di attivazione/disattivazione predefinita del tag per . Se memtag è true, il bootloader configura il tag MTE prenotazione, attiva i controlli dei tag nei livelli di eccezione inferiori e comunica al kernel la regione riservata ai tag tramite DT. Se memtag è false, il bootloader aggiunge arm64.nomte alla alla riga di comando del kernel.

Se memtag_kernel è true, il bootloader aggiunge kasan=on alla riga di comando del kernel.

Il bootloader DEVE cancellare i dati di MISC_MEMTAG_MODE_MEMTAG_ONCE e MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE a ogni avvio.

Se il bootloader supporta fastboot oem mte, sui set MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} per (1, 0, 0) e spento a (0, 0, 1), mentre in modo da preservare gli altri flag.

Devi configurare il prodotto per creare il programma binario mtectrl per il supporto dello spazio utente. Imposta quindi ro.arm64.memtag.bootctl_supported proprietà di sistema da indicare al sistema che il tuo bootloader supporta il messaggio memtag.

Interfaccia utente

Quando la proprietà ro.arm64.memtag.bootctl_supported è impostata, viene generato nel menu Opzioni sviluppatore consente all'utente di eseguire un riavvio soltanto con MTE in un bucket con il controllo delle versioni attivo. Il pubblico di destinazione è costituito dagli sviluppatori di app che vogliono testare le loro app con MTE. Screenshot dell'opzione sviluppatore MTE.

Proprietà di sistema

Per un utilizzo avanzato, la proprietà di sistema arm64.memtag.bootctl può utilizzare un elenco separato da virgole di i seguenti valori:

  • memtag: abilita in modo permanente l'MTE dello spazio utente (impostato MISC_MEMTAG_MODE_MEMTAG)
  • memtag-once: attiva l'MTE dello spazio utente una volta (impostato MISC_MEMTAG_MODE_MEMTAG_ONCE)
  • memtag-kernel: abilita MTE kernel-space (impostato MISC_MEMTAG_MODE_MEMTAG_KERNEL)
  • memtag-kernel-once: abilita MTE nello spazio kernel una volta (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)
  • memtag-off: disattiva la funzionalità MTE (impostata MISC_MEMTAG_MODE_MEMTAG_OFF)

Affinché la nuova impostazione abbia effetto (così com'è), è necessario riavviare il sistema applicati dal bootloader).