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_MEMTAG_MAGIC_HEADER correspondências 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 tags do MTE, ativar as verificações de tags nos níveis de exceção mais baixos e comunicar a região reservada de tags 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.