O Android 13 apresenta uma ABI para espaço de usuário para comunicar o modo MTE solicitado ao carregador de inicialização. Isso pode ser usado para habilitar o MTE em dispositivos que têm suporte de hardware, mas não vêm com o MTE ativado por padrão, ou para desabilitar o MTE em dispositivos que o acompanham.
Suporte de bootloader
Para suportar esta ABI, seu bootloader precisa ler misc_memtag_message
(definido em bootloader_message.h ) da partição misc
. Se uma misc_memtag_message
válida for encontrada (corresponde a MISC_VIRTUAL_AB_MAGIC_HEADER
e o número da versão é suportado), o bootloader calcula
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 de ativação/desativação do memtag padrão para o SKU. Se memtag
for true, o bootloader configura a reserva de tags MTE, permite verificações de tags nos níveis de exceção mais baixos e comunica a região reservada de tags ao kernel via DT. Se memtag
for falso, o bootloader anexará arm64.nomte à linha de comando do kernel.
Se memtag_kernel
for true, o bootloader anexa kasan=on
à linha de comando do kernel.
O gerenciador de inicialização DEVE limpar MISC_MEMTAG_MODE_MEMTAG_ONCE
e MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
em cada inicialização.
Se o bootloader suportar fastboot oem mte
, então on define MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}
para (1, 0, 0)
, e off para (0, 0, 1)
, preservando os outros sinalizadores.
Você deve configurar seu produto para construir o binário mtectrl
para suporte de espaço de usuário. Em seguida, defina a propriedade do sistema ro.arm64.memtag.bootctl_supported
para indicar ao sistema que seu gerenciador de inicialização suporta a mensagem memtag.
Interface de usuário
Quando a propriedadero.arm64.memtag.bootctl_supported
é definida, um botão no menu Opções do desenvolvedor permite que o usuário reinicie uma vez com o MTE ativado. O público-alvo para isso são desenvolvedores de aplicativos que desejam testar seus aplicativos com 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: habilite persistentemente o espaço do usuário MTE (defina
MISC_MEMTAG_MODE_MEMTAG
) - memtag-once: ativa o espaço do usuário MTE uma vez (defina
MISC_MEMTAG_MODE_MEMTAG_ONCE
) - memtag-kernel: ativa o espaço do kernel MTE (defina
MISC_MEMTAG_MODE_MEMTAG_KERNEL
) - memtag-kernel-once: ativa o kernel-space MTE uma vez (
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
) - memtag-off: desativar MTE (definir
MISC_MEMTAG_MODE_MEMTAG_OFF
)
O sistema deve ser reinicializado para que a nova configuração entre em vigor (como é aplicada pelo bootloader).