O Android 13 apresenta uma ABI para que o espaço do usuário comunique o modo MTE solicitado ao carregador de inicialização. Isso pode ser usado para ativar a MTE em dispositivos que têm suporte de hardware, mas não são enviados com a MTE ativada por padrão, ou para desativar a MTE em dispositivos que são enviados com ela.
Suporte ao carregador de inicialização
Para oferecer suporte a essa ABI, o carregador de inicialização precisa ler o
misc_memtag_message
(definido em
bootloader_message.h) da partição misc
.
Se um misc_memtag_message
válido for encontrado
(MISC_VIRTUAL_AB_MAGIC_HEADER
corresponde e o número da versão é compatível),
o carregador de inicialização vai calcular
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
é a configuração padrão de ativação/desativação da memtag para a
SKU. Se memtag
for verdadeiro, o carregador de inicialização vai configurar a reserva de tag do MTE, ativar as verificações de tag nos níveis de exceção mais baixos e comunicar a região reservada da tag ao kernel via DT. Se
memtag
for "false", o carregador de inicialização vai anexar
arm64.nomte
à linha de comando do kernel.
Se memtag_kernel
for verdadeiro, o carregador de inicialização vai anexar
kasan=on
à linha de comando do kernel. Caso contrário, ele
adiciona kasan=off
.
O carregador de inicialização PRECISA limpar MISC_MEMTAG_MODE_MEMTAG_ONCE
e
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
em todas as inicializações.
Se o carregador de inicialização for compatível com fastboot oem mte
, ele definirá MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}
como (1, 0, 0)
e (0, 0, 1)
, preservando as outras flags.
Configure o produto para criar o binário mtectrl
para suporte ao espaço do usuário. Em seguida, defina a propriedade do sistema ro.arm64.memtag.bootctl_supported
para indicar ao sistema que o carregador de inicialização é compatível com a mensagem memtag.
Interface do usuário
Quando a propriedadero.arm64.memtag.bootctl_supported
é definida, um
botão no menu "Opções do desenvolvedor" permite que o usuário reinicialize uma vez com a MTE
ativada. O público-alvo são desenvolvedores de apps que querem testar
os apps com o MTE.

Propriedade do sistema
Para uso avançado, a propriedade do sistema
arm64.memtag.bootctl
pode receber uma lista separada por vírgulas dos
seguintes valores:
-
memtag:ativação persistente do MTE no espaço do usuário (definir
MISC_MEMTAG_MODE_MEMTAG
) -
memtag-once:ativa o MTE do espaço do usuário uma vez (define
MISC_MEMTAG_MODE_MEMTAG_ONCE
) -
memtag-kernel:ativa o MTE no espaço do kernel (define
MISC_MEMTAG_MODE_MEMTAG_KERNEL
) -
memtag-kernel-once:ativa a MTE no espaço do kernel uma vez
(
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
) -
memtag-off:desativa a MTE (define
MISC_MEMTAG_MODE_MEMTAG_OFF
)
O sistema precisa ser reinicializado para que a nova configuração entre em vigor, já que ela é aplicada pelo carregador de inicialização.