Suporte ao carregador de inicialização MTE, suporte ao carregador de inicialização MTE

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 propriedade ro.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. Captura de tela da opção de desenvolvedor 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).