Suporte ao carregador de inicialização da MTE

O Android 13 apresenta uma ABI para que o espaço do usuário comunique o modo MTE solicitado ao carregador de inicialização. Você pode usar isso 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 corresponde e o número da versão é compatível), o carregador de inicialização será calculado da seguinte maneira:

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 ou desativação da memtag para a SKU. Se memtag for true, o carregador de inicialização vai configurar a reserva de tag da 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 com a árvore de dispositivos (DT). Se memtag for false, o carregador de inicialização vai anexar arm64.nomte à linha de comando do kernel.

Se memtag_kernel for true, 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, o argumento "on" vai definir as flags MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} como (1, 0, 0), e o argumento "off" vai defini-las 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 é compatível com a mensagem memtag.

Interface do usuário

Quando a propriedade ro.arm64.memtag.bootctl_supported é definida, a opção Reiniciar com MTE no menu Opções do desenvolvedor permite reiniciar uma vez com a MTE ativada. O público-alvo são desenvolvedores de apps que querem testar os aplicativos com MTE.

Opção para desenvolvedores da MTE

Figura 1. Opção para desenvolvedores da 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 de forma persistente a MTE no espaço do usuário (define MISC_MEMTAG_MODE_MEMTAG).
  • memtag-once ativa a MTE do espaço do usuário uma vez (define MISC_MEMTAG_MODE_MEMTAG_ONCE).
  • memtag-kernel ativa a MTE no espaço do kernel (defina MISC_MEMTAG_MODE_MEMTAG_KERNEL).
  • memtag-kernel-once ativa a MTE no espaço do kernel uma vez (defina MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE).
  • memtag-off desativa a MTE (defina MISC_MEMTAG_MODE_MEMTAG_OFF).

A configuração é aplicada pelo carregador de inicialização. Portanto, reinicie o sistema depois de fazer uma mudança.