Obsługa bootloadera MTE

W systemie Android 13 wprowadzono interfejs ABI dla przestrzeni użytkownika, który umożliwia przesyłanie żądanego trybu MTE do programu ładującego. Można tego użyć do włączenia MTE na urządzeniach, które obsługują sprzęt, ale nie są dostarczane z domyślnie włączoną funkcją MTE, lub do wyłączenia MTE na urządzeniach, które są z nią dostarczane.

Obsługa bootloadera

Aby obsłużyć ten ABI, Twój bootloader musi odczytać misc_memtag_message (zdefiniowany w bootloader_message.h ) z partycji misc . Jeśli zostanie znaleziony prawidłowy misc_memtag_message (pasuje MISC_VIRTUAL_AB_MAGIC_HEADER i obsługiwany jest numer wersji), program ładujący oblicza

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 to domyślne ustawienie włączania/wyłączania memtagu dla jednostki SKU. Jeśli memtag ma wartość true, program ładujący konfiguruje rezerwację znacznika MTE, umożliwia sprawdzanie znaczników na niższych poziomach wyjątków i przekazuje do jądra region zarezerwowany znacznika za pośrednictwem DT. Jeśli memtag ma wartość false, program ładujący dołącza arm64.nomte do wiersza poleceń jądra.

Jeśli memtag_kernel ma wartość true, program ładujący dołącza kasan=on do wiersza poleceń jądra.

Program ładujący MUSI wyczyścić MISC_MEMTAG_MODE_MEMTAG_ONCE i MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE przy każdym uruchomieniu.

Jeśli bootloader obsługuje fastboot oem mte , to ustawia MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} na (1, 0, 0) i wyłącza na (0, 0, 1) , zachowując pozostałe flagi.

Powinieneś skonfigurować swój produkt tak, aby tworzył plik binarny mtectrl w celu obsługi przestrzeni użytkownika. Następnie ustaw właściwość systemową ro.arm64.memtag.bootctl_supported , aby wskazać systemowi, że program ładujący obsługuje komunikat memtag.

Interfejs użytkownika

Po ustawieniu właściwości ro.arm64.memtag.bootctl_supported przycisk w menu Opcje programisty umożliwia użytkownikowi jednorazowe ponowne uruchomienie z włączoną funkcją MTE. Docelową grupą odbiorców są twórcy aplikacji, którzy chcą testować swoje aplikacje za pomocą MTE. Zrzut ekranu opcji programisty MTE.

Właściwość systemu

Do zastosowań zaawansowanych właściwość systemowa arm64.memtag.bootctl może przyjmować listę rozdzielonych przecinkami następujących wartości:

  • memtag: trwale włącz MTE w przestrzeni użytkownika (ustaw MISC_MEMTAG_MODE_MEMTAG )
  • memtag-once: włącz raz MTE w przestrzeni użytkownika (ustaw MISC_MEMTAG_MODE_MEMTAG_ONCE )
  • memtag-kernel: włącz MTE w przestrzeni jądra (ustaw MISC_MEMTAG_MODE_MEMTAG_KERNEL )
  • memtag-kernel-once: jednorazowo włącz MTE w przestrzeni jądra ( MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE )
  • memtag-off: wyłącz MTE (ustaw MISC_MEMTAG_MODE_MEMTAG_OFF )

Aby nowe ustawienie zaczęło obowiązywać (tak jak zostało zastosowane przez program ładujący), należy ponownie uruchomić system.