MTE Önyükleyici desteği, MTE Önyükleyici desteği

Android 13, istenen MTE modunu önyükleyiciye iletmek için kullanıcı alanı için bir ABI sunar. Bu, donanım desteği olan ancak varsayılan olarak MTE etkin olarak gönderilmeyen cihazlarda MTE'yi etkinleştirmek veya donanım desteğiyle birlikte gönderilen cihazlarda MTE'yi devre dışı bırakmak için kullanılabilir.

Önyükleyici desteği

Bu ABI'yi desteklemek için, önyükleyicinizin misc bölümünden misc_memtag_message ( bootloader_message.h'de tanımlanmış) okuması gerekir. Geçerli bir misc_memtag_message bulunursa ( MISC_VIRTUAL_AB_MAGIC_HEADER eşleşir ve sürüm numarası desteklenir), önyükleyici şunları hesaplar:

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/kapama ayarıdır. memtag doğruysa, önyükleyici MTE etiket rezervasyonunu ayarlar, daha düşük istisna düzeylerinde etiket kontrollerini etkinleştirir ve etiket ayrılmış bölgeyi DT aracılığıyla çekirdeğe iletir. memtag yanlışsa, önyükleyici arm64.nomte'yi çekirdek komut satırına ekler.

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

Önyükleyici her önyüklemede MISC_MEMTAG_MODE_MEMTAG_ONCE ve MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE temizlemelidir ZORUNLU .

Önyükleyici fastboot oem mte destekliyorsa, diğer bayrakları korurken açık MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} (1, 0, 0) olarak ve kapalıyı (0, 0, 1) olarak ayarlar.

Kullanıcı alanı desteği için ürününüzü mtectrl ikili dosyasını oluşturacak şekilde yapılandırmanız gerekir. Ardından ro.arm64.memtag.bootctl_supported sistem özelliğini, sisteme önyükleyicinizin memtag mesajını desteklediğini gösterecek ş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 etkinken bir kez yeniden başlatmasına olanak tanır. Bunun hedef kitlesi ise uygulamalarını MTE ile test etmek isteyen uygulama geliştiricileridir. MTE geliştirici seçeneğinin ekran görüntüsü.

Sistem özelliği

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

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

Yeni ayarın etkili olması için sistemin yeniden başlatılması gerekir (önyükleyici tarafından uygulandığı şekliyle).