O Android 13 apresenta uma ABI para o espaço do usuário para comunicar 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 a 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
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 pelo DT. Se
memtag
for falso, 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.
O carregador de inicialização PRECISA limpar MISC_MEMTAG_MODE_MEMTAG_ONCE
e
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
em cada inicialização.
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 desativado como (0, 0, 1)
, preservando
as outras flags.
Configure seu 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 oferece suporte à mensagem de memtag.
Interface do usuário
Quando a propriedadero.arm64.memtag.bootctl_supported
é definida, um
botão no menu de opções do desenvolvedor permite que o usuário reinicie uma vez com a MTE
ativada. O público-alvo é formado por desenvolvedores de apps que querem testar
seus apps com a 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:permite MTE no espaço do usuário de forma persistente (define
MISC_MEMTAG_MODE_MEMTAG
). -
memtag-once:permite a MTE do espaço do usuário uma vez (definida como
MISC_MEMTAG_MODE_MEMTAG_ONCE
). -
memtag-kernel:ativar a MTE no espaço do kernel (definir
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.