Supporto bootloader MTE

Android 13 introduce un ABI per lo spazio utente per comunicare al bootloader la modalità MTE richiesta. Questo parametro può essere utilizzato per attivare l'MTE sui dispositivi che supportano l'hardware, ma che non lo hanno abilitato per impostazione predefinita, oppure per disattivare l'MTE sui dispositivi che lo hanno abilitato.

Supporto del bootloader

Per supportare questa ABI, il bootloader deve leggere il messaggio 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 predefinita di attivazione/disattivazione del memtag per lo SKU. Se memtag è true, il bootloader configura la prenotazione del tag MTE, abilita i controlli dei tag nei livelli di eccezione inferiori e comunica la regione riservata del tag al kernel tramite DT. Se memtag è falso, il bootloader aggiunge arm64.nomte 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 MISC_MEMTAG_MODE_MEMTAG_ONCE e MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE a ogni avvio.

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

Devi configurare il tuo prodotto per compilare il codice 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 bootloader supporta il messaggio memtag.

Interfaccia utente

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

Proprietà di sistema

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

  • memtag: abilita in modo persistente l'MTE nello spazio utente (imposta MISC_MEMTAG_MODE_MEMTAG)
  • memtag-once: abilita una volta l'MTE nello spazio utente (imposta MISC_MEMTAG_MODE_MEMTAG_ONCE)
  • memtag-kernel: attiva l'MTE nello spazio del kernel (imposta MISC_MEMTAG_MODE_MEMTAG_KERNEL)
  • memtag-kernel-once: attiva una volta l'MTE nello spazio kernel (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)
  • memtag-off: disattiva MTE (imposta MISC_MEMTAG_MODE_MEMTAG_OFF)

Il sistema deve essere riavviato affinché la nuova impostazione venga applicata dal bootloader.