Obsługa programu rozruchowego MTE

Android 13 wprowadza interfejs ABI do komunikacji przez przestrzeń użytkownika trybu MTE w programie rozruchowym. Można tego użyć, aby włączyć MTE na urządzeniach, które: mają obsługę sprzętu, ale nie są wysyłane z domyślnie włączoną obsługą MTE lub wyłącz MTE na urządzeniach, które są z nim wysyłane.

Obsługa programu rozruchowego

Aby obsługiwać ten interfejs ABI, program rozruchowy musi odczytać misc_memtag_message (zdefiniowany w bootoloader_message.h) z partycji misc. Po znalezieniu prawidłowego pola misc_memtag_message (MISC_VIRTUAL_AB_MAGIC_HEADER pasuje, a numer wersji jest obsługiwany), program rozruchowy obliczy

memtag = (default_memtag && !(różne.memtag_tryb i MISC_MEMTAG_MODE_MEMTAG_OFF))) ||
      różne tryby.memtag_i MISC_MEMTAG_MODE_MEMTAG ||
      różne tryby.memtag_i MISC_MEMTAG_MODE_MEMTAG_ONCE

memtag_kernel = misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL ||
      różne tryby.memtag_i MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE

default_memtag to domyślne ustawienie włączania/wyłączania funkcji memtag dla SKU. Jeśli memtag ma wartość prawda, program rozruchowy konfiguruje tag MTE rezerwacja, włącza sprawdzanie tagów na niższych poziomach wyjątków; przekazuje zarezerwowany region tagów do jądra przez DT. Jeśli memtag ma wartość fałsz, program rozruchowy dołącza plik arm64.nomte do wiersza poleceń jądra systemu operacyjnego.

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

Program rozruchowy MUSI wyczyścić MISC_MEMTAG_MODE_MEMTAG_ONCE i MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE przy każdym uruchomieniu.

Jeśli program rozruchowy obsługuje interfejs fastboot oem mte, to w zbiorach MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} do (1, 0, 0) i wyjechać do (0, 0, 1), a przy zachowaniu pozostałych flag.

Skonfiguruj usługę tak, aby kompilowała plik binarny mtectrl . Następnie w parametrze ro.arm64.memtag.bootctl_supported właściwość systemowa do wskazania do systemu, który program rozruchowy obsługuje komunikat memtag.

Interfejs użytkownika

Gdy skonfigurowana jest właściwość ro.arm64.memtag.bootctl_supported, przycisk w menu Opcje programisty umożliwia ponowne uruchomienie urządzenia po włączeniu MTE . Docelową grupą odbiorców są deweloperzy aplikacji, którzy chcą przetestować aplikację aplikacji z MTE. Zrzut ekranu przedstawiający opcję dla programistów MTE.

Właściwość systemowa

W przypadku zaawansowanych funkcji właściwość systemowa arm64.memtag.bootctl może zawierać rozdzielaną przecinkami listę funkcji następujące wartości:

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

Aby nowe ustawienie zaczęło obowiązywać, system musi zostać zrestartowany (ponieważ jest stosowane przez program rozruchowy).