Suporte ao carregador de inicialização MTE

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 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 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.

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).