Supporto per bootloader MTE

Android 13 introduce un'ABI per lo spazio utente per comunicare la modalità MTE richiesta al bootloader. Questo può essere utilizzato per abilitare MTE sui dispositivi che dispongono di supporto hardware ma non vengono forniti con MTE abilitato per impostazione predefinita o per disabilitare MTE sui dispositivi che vengono forniti con esso.

Supporto per il bootloader

Per supportare questa ABI, il tuo 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 & 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 è l'impostazione di attivazione/disattivazione del memtag predefinita per lo SKU. Se memtag è true, il bootloader configura la prenotazione dei tag MTE, abilita i controlli dei tag nei livelli di eccezione inferiori e comunica la regione riservata dei tag al kernel tramite DT. Se memtag è false, il bootloader aggiunge arm64.nomte alla riga di comando del kernel.

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

Il bootloader DEVE cancellare MISC_MEMTAG_MODE_MEMTAG_ONCE e MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE ad ogni avvio.

Se il bootloader supporta fastboot oem mte , on imposta MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} su (1, 0, 0) e off su (0, 0, 1) , preservando gli altri flag.

Dovresti configurare il tuo prodotto per creare il binario mtectrl per il supporto dello spazio utente. Quindi, imposta la proprietà di sistema ro.arm64.memtag.bootctl_supported per indicare al sistema che il tuo bootloader supporta il messaggio memtag.

Interfaccia utente

Quando è impostata la proprietà ro.arm64.memtag.bootctl_supported , un pulsante nel menu Opzioni sviluppatore consente all'utente di riavviare una volta con MTE abilitato. Il pubblico target sono gli sviluppatori di app che desiderano testare le proprie app con MTE. Screenshot dell'opzione sviluppatore MTE.

Proprietà del sistema

Per un uso avanzato, la proprietà di sistema arm64.memtag.bootctl può accettare un elenco separato da virgole dei seguenti valori:

  • memtag: abilita permanentemente MTE dello spazio utente (imposta MISC_MEMTAG_MODE_MEMTAG )
  • memtag-once: abilita MTE nello spazio utente una volta (imposta MISC_MEMTAG_MODE_MEMTAG_ONCE )
  • memtag-kernel: abilita MTE nello spazio kernel (imposta MISC_MEMTAG_MODE_MEMTAG_KERNEL )
  • memtag-kernel-once: abilita kernel-space MTE una volta ( MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE )
  • memtag-off: disabilita MTE (imposta MISC_MEMTAG_MODE_MEMTAG_OFF )

Il sistema deve essere riavviato affinché la nuova impostazione abbia effetto (poiché viene applicata dal bootloader).