O Android 13 introduz uma ABI para espaço do usuário para comunicar o modo MTE solicitado ao bootloader. Isso pode ser usado para habilitar o MTE em dispositivos que possuem suporte de hardware, mas não são fornecidos com o MTE habilitado por padrão, ou para desabilitar o MTE em dispositivos que o acompanham.
Suporte ao carregador de inicialização
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 ( MISC_VIRTUAL_AB_MAGIC_HEADER
corresponde 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 padrão de ativação/desativação de memtag para o SKU. Se memtag
for verdadeiro, o bootloader configura a reserva de tags MTE, habilita 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 anexa arm64.nomte à linha de comando do kernel.
Se memtag_kernel
for verdadeiro, o bootloader anexa kasan=on
à linha de comando do kernel.
O bootloader 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
, on define MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}
como (1, 0, 0)
e off como (0, 0, 1)
, preservando os outros sinalizadores.
Você deve configurar seu produto para construir 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 seu carregador 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 habilitado. O público-alvo são desenvolvedores de aplicativos que desejam testar seus aplicativos com MTE. ![Captura de tela da opção de desenvolvedor MTE.](https://source.android.google.cn/docs/security/images/screen_devoption.png?authuser=5&hl=pt)
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: habilita persistentemente o MTE do espaço do usuário (definir
MISC_MEMTAG_MODE_MEMTAG
) - memtag-once: habilita o MTE do espaço do usuário uma vez (definir
MISC_MEMTAG_MODE_MEMTAG_ONCE
) - memtag-kernel: habilita o MTE do espaço do kernel (definir
MISC_MEMTAG_MODE_MEMTAG_KERNEL
) - memtag-kernel-once: habilita o MTE do espaço do kernel uma vez (
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
) - memtag-off: desabilita MTE (definir
MISC_MEMTAG_MODE_MEMTAG_OFF
)
O sistema deve ser reinicializado para que a nova configuração tenha efeito (conforme aplicada pelo bootloader).