Suporte ao carregador de inicialização da MTE

O Android 13 introduz uma ABI para o espaço do usuário para comunicar o modo MTE para o carregador de inicialização. Ela pode ser usada 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 desativar a MTE nos dispositivos fornecidos com ela.

Suporte ao carregador de inicialização

Para oferecer suporte a essa ABI, seu carregador de inicialização precisa ler a 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 a, e o número da versão é compatível. o carregador de inicialização calcula

memtag = (default_memtag && !(misc.memtag_mode &MISC_MEMTAG_MODE_MEMTAG_OFF)) ||
      misc.memtag_mode e MISC_MEMTAG_MODE_MEMTAG ||
      misc.memtag_mode e MISC_MEMTAG_MODE_MEMTAG_ONCE

memtag_kernel = misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL ||
      misc.memtag_mode e 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 carregador de inicialização configurará a tag MTE reserva, ativa verificações de tags nos níveis de exceção mais baixos e comunica a região reservada da tag ao kernel via DT. Se memtag for falso, o carregador de inicialização anexa arm64.nomte ao linha de comando do kernel.

Se memtag_kernel for verdadeiro, o carregador de inicialização anexa 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 a cada inicialização.

Se o carregador de inicialização for compatível com fastboot oem mte, os conjuntos MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} para (1, 0, 0) e depois para (0, 0, 1), enquanto as outras flags.

Configure seu produto para criar o binário mtectrl. para dar suporte ao espaço do usuário. Depois, defina Propriedade do sistema ro.arm64.memtag.bootctl_supported para indicar ao sistema se o carregador de inicialização suporta a mensagem memtag.

Interface do usuário

Quando a propriedade ro.arm64.memtag.bootctl_supported é definida, um no menu "Developer Options" permite que o usuário reinicie uma vez com a MTE. ativado. O público-alvo são desenvolvedores de apps que querem testar os apps deles com a MTE. Captura de tela da opção do desenvolvedor da MTE.

Propriedade do sistema

Para uso avançado, a propriedade do sistema arm64.memtag.bootctl pode pegar uma lista separada por vírgulas dos seguintes valores:

  • memtag:ativa continuamente a MTE do espaço do usuário (definida MISC_MEMTAG_MODE_MEMTAG)
  • memtag-once:ativa a MTE do espaço do usuário uma vez (definida MISC_MEMTAG_MODE_MEMTAG_ONCE)
  • memtag-kernel:ativa a MTE do espaço do kernel (conjunto de MISC_MEMTAG_MODE_MEMTAG_KERNEL)
  • memtag-kernel-once:ativa a MTE do espaço do kernel uma vez. (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)
  • memtag-off:desativa a MTE (definida MISC_MEMTAG_MODE_MEMTAG_OFF)

O sistema precisa ser reiniciado para que a nova configuração entre em vigor (já que é aplicado pelo carregador de inicialização).