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_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 wyłącza (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).