Obsługa programu rozruchowego MTE

Android 13 wprowadza interfejs ABI, który umożliwia komunikację z przestrzenią użytkownika w celu przekazywania do programu rozruchowego żądanego trybu MTE. Można go używać do włączania MTE na urządzeniach, które obsługują tę technologię sprzętowo, ale nie mają jej domyślnie włączonej, lub do wyłączania 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 odczytywać strukturę misc_memtag_message (zdefiniowaną w pliku bootloader_message.h) z partycji misc. Jeśli zostanie znaleziony prawidłowy plik misc_memtag_message (MISC_VIRTUAL_AB_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łączania i wyłączania memtagu dla kodu SKU. Jeśli memtag ma wartość true, program rozruchowy konfiguruje rezerwację tagu MTE, włącza sprawdzanie tagów na niższych poziomach wyjątków i przekazuje do jądra za pomocą DT informacje o zarezerwowanym regionie tagu. Jeśli memtag ma wartość false, program rozruchowy dołącza arm64.nomte do wiersza poleceń jądra.

Jeśli wartość memtag_kernel to prawda, program rozruchowy dołącza kasan=on do wiersza poleceń jądra. W przeciwnym razie dodaje znak kasan=off.

Program rozruchowy 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, ustawia MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} na (1, 0, 0) i wyłącza (0, 0, 1), zachowując pozostałe flagi.

Skonfiguruj produkt tak, aby tworzył mtectrlplik 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, w menu Opcje programisty pojawia się przycisk, który umożliwia użytkownikowi jednokrotne ponowne uruchomienie urządzenia z włączoną funkcją MTE. Jest on przeznaczony dla deweloperów aplikacji, którzy chcą testować swoje aplikacje za pomocą MTE. Zrzut ekranu z opcją dewelopera 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łącz 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: włącz MTE w przestrzeni jądra raz (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)
  • memtag-off: wyłącza MTE (ustawia MISC_MEMTAG_MODE_MEMTAG_OFF)

Aby nowe ustawienie zaczęło obowiązywać, należy ponownie uruchomić system (ponieważ jest ono stosowane przez program rozruchowy).