MTE bootloader desteği

Android 13, kullanıcının istediği MTE modunu önyükleyiciye bildirmek için kullanıcı alanına yönelik bir ABI sunar. Bu, donanım desteği olan ancak varsayılan olarak MTE etkinleştirilmemiş cihazlarda MTE'yi etkinleştirmek veya MTE'nin etkinleştirildiği cihazlarda MTE'yi devre dışı bırakmak için kullanılabilir.

Bootloader desteği

Bu ABI'yi desteklemek için bootloader'ınızın misc_memtag_message ( bootloader_message.h içinde tanımlanır) öğesini misc bölümünden okuması gerekir. Geçerli bir misc_memtag_message bulunursa (MISC_VIRTUAL_AB_MAGIC_HEADER eşleşir ve sürüm numarası destekleniyorsa), önyükleyici

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, SKU için varsayılan memtag açma/kapatma ayarıdır. memtag doğruysa önyükleyici, MTE etiketi ayırma işlemini yapar, daha düşük istisna seviyelerinde etiket kontrollerini etkinleştirir ve ayrılmış etiket bölgesini DT aracılığıyla çekirdeğe iletir. If memtag false ise önyükleyici, çekirdek komut satırına arm64.nomte ekler.

memtag_kernel doğruysa önyükleyici, çekirdek komut satırına kasan=on ekler. Aksi takdirde kasan=off eklenir.

Önyükleyici, her önyüklemede MISC_MEMTAG_MODE_MEMTAG_ONCE ve MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE'yi TEMİZLEMELİDİR.

Önyükleyici fastboot oem mte'yı destekliyorsa diğer işaretleri korurken MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}'yı (1, 0, 0)'ya, (0, 0, 1)'ı ise kapalıya ayarlar.

Ürününüzü, kullanıcı alanı desteği için mtectrl ikili dosyasını oluşturacak şekilde yapılandırmanız gerekir. Ardından, ro.arm64.memtag.bootctl_supported sistem özelliğini, önyükleyicinizin memtag mesajını desteklediğini sisteme bildirecek şekilde ayarlayın.

Kullanıcı arayüzü

ro.arm64.memtag.bootctl_supported özelliği ayarlandığında, Geliştirici Seçenekleri menüsündeki bir düğme kullanıcının MTE etkin olarak bir kez yeniden başlatmasına olanak tanır. Bu dokümanın hedef kitlesi, uygulamalarını MTE ile test etmek isteyen uygulama geliştiricilerdir. MTE geliştirici seçeneğinin ekran görüntüsü.

Sistem özelliği

Gelişmiş kullanım için sistem özelliği arm64.memtag.bootctl, aşağıdaki değerlerin virgülle ayrılmış bir listesini alabilir:

  • memtag: Kullanıcı alanı MTE'yi kalıcı olarak etkinleştirin (set MISC_MEMTAG_MODE_MEMTAG)
  • memtag-once: Kullanıcı alanı MTE'yi bir kez etkinleştirin (MISC_MEMTAG_MODE_MEMTAG_ONCE ayarlanır).
  • memtag-kernel: çekirdek alanı MTE'yi etkinleştirin (MISC_MEMTAG_MODE_MEMTAG_KERNEL olarak ayarlayın)
  • memtag-kernel-once: çekirdek alanında MTE'yi bir kez etkinleştirin (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)
  • memtag-off: MTE'yi devre dışı bırakır (set MISC_MEMTAG_MODE_MEMTAG_OFF)

Yeni ayarın geçerli olması için sistemin yeniden başlatılması gerekir (bootloader tarafından uygulandığı için).