Android 13 wprowadza ABI dla przestrzeni użytkownika, aby przekazać żądany tryb MTE do bootloadera. Można go użyć do włączenia MTE na urządzeniach, które mają wsparcie sprzętowe, ale nie są dostarczane z włączoną funkcją MTE domyślnie, lub do wyłączenia MTE na urządzeniach, które są z nią dostarczane.
Obsługa programu rozruchowego
Aby obsługiwać ten ABI, program rozruchowy musi odczytać plik misc_memtag_message
(zdefiniowany w pliku
bootloader_message.h) z partycji misc
.
Jeśli znaleziono prawidłową wartość misc_memtag_message
(MISC_VIRTUAL_AB_MAGIC_HEADER
pasuje, a numer wersji jest obsługiwany), bootloader 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/wyłączania memtagu w przypadku kodu SKU. Jeśli memtag
ma wartość Prawda, bootloader konfiguruje rezerwację tagu MTE, włącza sprawdzanie tagów na niższych poziomach wyjątków i przekazuje informacje o zarezerwowanym regionie do jądra za pomocą DT. Jeśli
memtag
ma wartość fałsz, bootloader doda do wiersza poleceń jądra plik arm64.nomte.
Jeśli memtag_kernel
ma wartość Prawda, bootloader dołącza kasan=on
do wiersza poleceń jądra.
Program rozruchowy MUSI być MISC_MEMTAG_MODE_MEMTAG_ONCE
i MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
przy każdym uruchomieniu.
Jeśli bootloader obsługuje flagę fastboot oem mte
, to w trybie włączonym flaga MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}
jest ustawiona na (1, 0, 0)
, a w trybie wyłączonym – na (0, 0, 1)
, przy zachowaniu pozostałych flag.
Musisz skonfigurować produkt tak, aby generował plik binarny mtectrl
na potrzeby obsługi przestrzeni użytkownika. Następnie ustaw właściwość systemu ro.arm64.memtag.bootctl_supported
, aby wskazać systemowi, że bootloader obsługuje komunikat memtag.
Interfejs użytkownika
Gdy właściwośćro.arm64.memtag.bootctl_supported
jest ustawiona, przycisk w menu Opcje programisty umożliwia użytkownikowi jednokrotne ponowne uruchomienie z włączonym MTE. Ta wersja jest przeznaczona dla deweloperów aplikacji, którzy chcą testować swoje aplikacje za pomocą MTE.

Właściwość systemowa
W przypadku zaawansowanego korzystania z właściwości systemowej arm64.memtag.bootctl
możesz podać listę rozdzieloną przecinkami z tymi wartościami:
-
memtag: trwałe włączenie MTE w przestrzeni użytkownika (ustaw
MISC_MEMTAG_MODE_MEMTAG
). -
memtag-once: włącz MTE w przestrzeni użytkownika raz (ustaw
MISC_MEMTAG_MODE_MEMTAG_ONCE
). -
memtag-kernel: włączanie MTE w przestrzeni jądra (ustaw:
MISC_MEMTAG_MODE_MEMTAG_KERNEL
). -
memtag-kernel-once: jednorazowe włączenie MTE w przestrzeni jądra (
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
). -
memtag-off: wyłącz MTE (ustaw
MISC_MEMTAG_MODE_MEMTAG_OFF
)
Aby nowe ustawienie zaczęło obowiązywać, system musi zostać ponownie uruchomiony (ponieważ jest ono stosowane przez program rozruchowy).