Obsługa programu rozruchowego MTE

Android 13 wprowadza interfejs ABI przestrzeni użytkownika, który umożliwia przekazywanie do programu rozruchowego żądanego trybu MTE. Można go używać do włączania MTE na urządzeniach, które obsługują tę technologię, 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 w przypadku 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 wartość memtag to false, program rozruchowy dołącza do wiersza poleceń jądra ciąg arm64.nomte.

Jeśli wartość memtag_kernel to prawda, program rozruchowy dołącza kasan=on do wiersza poleceń jądra. W przeciwnym razie dodaje 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)(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).