Obsługa programu rozruchowego MTE

Android 13 wprowadza ABI dla przestrzeni użytkownika, aby przekazać żądany tryb MTE do bootloadera. Można go użyć do włączenia MTE na urządzeniach, które mają wsparcie sprzętowe, ale nie są dostarczane z włączoną funkcją MTE domyślnie, lub do wyłączenia MTE na urządzeniach, które są z nią dostarczane.

Obsługa programu rozruchowego

Aby obsługiwać ten ABI, program rozruchowy musi odczytać plik misc_memtag_message (zdefiniowany w pliku bootloader_message.h) z partycji misc. Jeśli znaleziono prawidłową wartość misc_memtag_message (MISC_VIRTUAL_AB_MAGIC_HEADER pasuje, a numer wersji jest obsługiwany), bootloader 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 w przypadku kodu SKU. Jeśli memtag ma wartość Prawda, bootloader konfiguruje rezerwację tagu MTE, włącza sprawdzanie tagów na niższych poziomach wyjątków i przekazuje informacje o zarezerwowanym regionie do jądra za pomocą DT. Jeśli memtag ma wartość fałsz, bootloader doda do wiersza poleceń jądra plik arm64.nomte.

Jeśli memtag_kernel ma wartość Prawda, bootloader dołącza kasan=on do wiersza poleceń jądra.

Program rozruchowy MUSI być MISC_MEMTAG_MODE_MEMTAG_ONCEMISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE przy każdym uruchomieniu.

Jeśli bootloader obsługuje flagę fastboot oem mte, to w trybie włączonym flaga MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} jest ustawiona na (1, 0, 0), a w trybie wyłączonym – na (0, 0, 1), przy zachowaniu pozostałych flag.

Musisz skonfigurować produkt tak, aby generował plik binarny mtectrl na potrzeby obsługi przestrzeni użytkownika. Następnie ustaw właściwość systemu ro.arm64.memtag.bootctl_supported, aby wskazać systemowi, że bootloader obsługuje komunikat memtag.

Interfejs użytkownika

Gdy właściwość ro.arm64.memtag.bootctl_supported jest ustawiona, przycisk w menu Opcje programisty umożliwia użytkownikowi jednokrotne ponowne uruchomienie z włączonym MTE. Ta wersja jest przeznaczona dla deweloperów aplikacji, którzy chcą testować swoje aplikacje za pomocą MTE. Zrzut ekranu z opcją dla dewelopera w MTE

Właściwość systemowa

W przypadku zaawansowanego korzystania z właściwości systemowej arm64.memtag.bootctl możesz podać listę rozdzieloną przecinkami z tymi wartościami:

  • memtag: trwałe włączenie MTE w przestrzeni użytkownika (ustaw MISC_MEMTAG_MODE_MEMTAG).
  • memtag-once: włącz MTE w przestrzeni użytkownika raz (ustaw MISC_MEMTAG_MODE_MEMTAG_ONCE).
  • memtag-kernel: włączanie MTE w przestrzeni jądra (ustaw:MISC_MEMTAG_MODE_MEMTAG_KERNEL).
  • memtag-kernel-once: jednorazowe włączenie 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ć, system musi zostać ponownie uruchomiony (ponieważ jest ono stosowane przez program rozruchowy).