Obsługa programu rozruchowego MTE

Android 13 wprowadza interfejs ABI, który umożliwia komunikację między przestrzenią użytkownika a programem rozruchowym w celu przekazywania żądanego trybu MTE. Możesz użyć tego ustawienia, aby włączyć MTE na urządzeniach, które obsługują tę technologię, ale nie mają jej domyślnie włączonej, lub wyłączyć MTE na urządzeniach, które mają ją domyślnie włączoną.

Obsługa programu rozruchowego

Aby obsługiwać ten interfejs ABI, program rozruchowy musi odczytać misc_memtag_message (zdefiniowany w  bootloader_message.h) z partycji misc. Jeśli zostanie znaleziony prawidłowy misc_memtag_message (MISC_MEMTAG_MAGIC_HEADER pasuje, a numer wersji jest obsługiwany), program rozruchowy 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łączenia lub wyłączenia znacznika pamięci dla kodu SKU określonego przez program rozruchowy. Jeśli memtag ma wartość true, program rozruchowy konfiguruje rezerwację tagów MTE, włącza sprawdzanie tagów na niższych poziomach wyjątków i przekazuje do jądra informacje o zarezerwowanym regionie tagów za pomocą drzewa urządzeń (DT). Jeśli memtag ma wartość false, program rozruchowy dodaje arm64.nomte do wiersza poleceń jądra.

Jeśli memtag_kernel ma wartość true, program rozruchowy dodaje kasan=on do wiersza poleceń jądra. W przeciwnym razie dodaje kasan=off.

Bootloader musi czyścić MISC_MEMTAG_MODE_MEMTAG_ONCEMISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE przy każdym uruchomieniu.

Jeśli program rozruchowy obsługuje fastboot oem mte, argument on powinien ustawić flagi MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} na (1, 0, 0), a argument off powinien ustawić je na (0, 0, 1), zachowując pozostałe flagi.

Skonfiguruj produkt, aby utworzyć mtectrl binarny na potrzeby obsługi przestrzeni użytkownika. Następnie ustaw właściwość systemową ro.arm64.memtag.bootctl_supported, aby poinformować system, że program rozruchowy obsługuje komunikat memtag.

Interfejs użytkownika

Gdy ustawiona jest właściwość ro.arm64.memtag.bootctl_supported, menu Rozszerzenie do tagowania pamięci w menu Opcje programisty umożliwia użytkownikowi włączenie MTE na urządzeniu. Jest on przeznaczony dla deweloperów aplikacji, którzy chcą testować swoje aplikacje za pomocą MTE.

Opcja dla programistów MTE

Rysunek 1. Menu programisty MTE.

Właściwość systemu

W przypadku zaawansowanego użycia właściwość systemu arm64.memtag.bootctl może przyjmować listę rozdzieloną przecinkami, która zawiera te wartości:

  • memtag trwale włącza MTE w przestrzeni użytkownika (ustawia MISC_MEMTAG_MODE_MEMTAG).
  • memtag-once włącza MTE w przestrzeni użytkownika (set MISC_MEMTAG_MODE_MEMTAG_ONCE).
  • memtag-kernel włącza MTE w przestrzeni jądra (ustawienie MISC_MEMTAG_MODE_MEMTAG_KERNEL).
  • memtag-kernel-once włącza MTE w przestrzeni jądra (ustawia MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE).
  • memtag-off wyłącza MTE (set MISC_MEMTAG_MODE_MEMTAG_OFF).

Ustawienie jest stosowane przez program rozruchowy, więc po wprowadzeniu zmiany uruchom ponownie system.