Android 13 wprowadza interfejs ABI, który umożliwia przestrzeni użytkownika przekazywanie do programu rozruchowego żądanego trybu MTE. Możesz użyć tej opcji, 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 memtagu dla numeru 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 region zarezerwowany dla tagu za pomocą drzewa urządzenia (DT). Jeśli wartość parametru memtag to false, program rozruchowy dołącza 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_ONCE i MISC_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, opcja Uruchom ponownie z MTE w menu Opcje programisty umożliwia jednokrotne ponowne uruchomienie z włączonym MTE. Jest ona przeznaczona dla deweloperów aplikacji, którzy chcą testować swoje aplikacje za pomocą MTE.

Rysunek 1. Opcja programisty MTE.
Właściwość systemowa
W przypadku zaawansowanego użycia właściwość systemu arm64.memtag.bootctl może przyjmować listę rozdzieloną przecinkami, która zawiera te wartości:
-
memtagtrwale włącza MTE w przestrzeni użytkownika (ustawiaMISC_MEMTAG_MODE_MEMTAG). -
memtag-oncewłącza MTE w przestrzeni użytkownika (setMISC_MEMTAG_MODE_MEMTAG_ONCE). -
memtag-kernelwłącza MTE w przestrzeni jądra (ustawienieMISC_MEMTAG_MODE_MEMTAG_KERNEL). -
memtag-kernel-oncewłącza MTE w przestrzeni jądra (ustawiaMISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE). -
memtag-offwyłącza MTE (setMISC_MEMTAG_MODE_MEMTAG_OFF).
Ustawienie jest stosowane przez program rozruchowy, więc po wprowadzeniu zmiany uruchom ponownie system.