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_ONCE
i MISC_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 (0, 0, 1)
, zachowując pozostałe flagi.
Skonfiguruj produkt tak, aby tworzył mtectrl
plik 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.

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).