MTE bootloader desteği

Android 13, istenen MTE modunu önyükleyiciye bildirmek için kullanıcı alanı için bir ABI'yi kullanıma sunar. Bu komut, donanım desteğine sahip 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 bölümündeki misc_memtag_message dosyasını ( bootloader_message.h dosyasında tanımlanmıştır) okuması gerekir. Geçerli bir misc_memtag_message bulunursa (MISC_VIRTUAL_AB_MAGIC_HEADER eşleşirse ve sürüm numarası destekleniyorsa) bootloader

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 etiket rezervasyonunu oluşturur, daha düşük istisna düzeylerinde etiket kontrollerini etkinleştirir ve etiket rezerve bölgesini DT aracılığıyla çekirdeğe iletir. memtag yanlışsa önyükleyici, arm64.nomte dosyasını çekirdek komut satırına ekler.

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

Önyükleme yükleyici, her önyüklemede MISC_MEMTAG_MODE_MEMTAG_ONCE ve MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE dosyalarını SIFIRLAMALIDIR.

Önyükleyici fastboot oem mte'ü destekliyorsa on, diğer işaretleri koruyarak MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}(1, 0, 0), off ise (0, 0, 1) olarak 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 mülkünü, sisteme önyükleyicinizin memtag mesajını desteklediğini belirtecek ş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. Bu özelliğin hedef kitlesi, uygulamalarını MTE ile test etmek isteyen uygulama geliştiricilerdir. MTE geliştirici seçeneğinin ekran görüntüsü.

Sistem mülkü

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

  • memtag: Kullanıcı alanındaki MTE'yi kalıcı olarak etkinleştirin (MISC_MEMTAG_MODE_MEMTAG değerini ayarlayın)
  • memtag-once: Kullanıcı alanında MTE'yi bir kez etkinleştirin (MISC_MEMTAG_MODE_MEMTAG_ONCE değerini ayarlayın)
  • memtag-kernel: çekirdek alanında MTE'yi etkinleştirin (MISC_MEMTAG_MODE_MEMTAG_KERNEL değerini 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 (MISC_MEMTAG_MODE_MEMTAG_OFF değerini alır)

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