รองรับ MTE Bootloader

Android 13 เปิดตัว ABI สำหรับพื้นที่ผู้ใช้เพื่อสื่อสารโหมด MTE ที่ร้องขอไปยังโปรแกรมโหลดบูต ซึ่งสามารถใช้เพื่อเปิดใช้งาน MTE บนอุปกรณ์ที่มีการรองรับฮาร์ดแวร์แต่ไม่ได้มาพร้อมกับ MTE ที่เปิดใช้งานตามค่าเริ่มต้น หรือเพื่อปิดใช้งาน MTE บนอุปกรณ์ที่จัดส่งมาพร้อมกับมัน

การสนับสนุนบูตโหลดเดอร์

เพื่อรองรับ ABI นี้ bootloader ของคุณจะต้องอ่าน misc_memtag_message (กำหนดใน bootloader_message.h ) จากพาร์ติชั่น misc หากพบ misc_memtag_message ที่ถูกต้อง ( MISC_VIRTUAL_AB_MAGIC_HEADER ตรงกัน และรองรับหมายเลขเวอร์ชัน) 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 คือการตั้งค่าเปิด/ปิด memtag เริ่มต้นสำหรับ SKU หาก memtag เป็นจริง bootloader จะตั้งค่าการจองแท็ก MTE เปิดใช้งานการตรวจสอบแท็กในระดับข้อยกเว้นระดับล่าง และสื่อสารขอบเขตแท็กที่สงวนไว้ไปยังเคอร์เนลผ่าน DT หาก memtag เป็นเท็จ bootloader จะผนวก arm64.nomte เข้ากับบรรทัดคำสั่งเคอร์เนล

หาก memtag_kernel เป็นจริง bootloader จะผนวก kasan=on เข้ากับบรรทัดคำสั่งเคอร์เนล

Bootloader ต้อง ล้าง MISC_MEMTAG_MODE_MEMTAG_ONCE และ MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE ในการบู๊ตทุกครั้ง

หาก bootloader รองรับ fastboot oem mte ให้ตั้งค่า MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} เป็น (1, 0, 0) และปิดเป็น (0, 0, 1) ในขณะที่รักษาแฟล็กอื่นไว้

คุณควรกำหนดค่าผลิตภัณฑ์ของคุณเพื่อสร้างไบนารี mtectrl เพื่อรองรับพื้นที่ผู้ใช้ จากนั้น ตั้งค่าคุณสมบัติระบบ ro.arm64.memtag.bootctl_supported เพื่อระบุให้ระบบทราบว่าโปรแกรมโหลดบูตของคุณรองรับข้อความ memtag

หน้าจอผู้ใช้

เมื่อตั้งค่าคุณสมบัติ ro.arm64.memtag.bootctl_supported ปุ่มในเมนูตัวเลือกสำหรับนักพัฒนาจะอนุญาตให้ผู้ใช้รีบูตหนึ่งครั้งโดยเปิดใช้งาน MTE กลุ่มเป้าหมายคือนักพัฒนาแอปที่ต้องการทดสอบแอปของตนกับ MTE ภาพหน้าจอของตัวเลือกนักพัฒนา MTE

คุณสมบัติของระบบ

สำหรับการใช้งานขั้นสูง คุณสมบัติระบบ arm64.memtag.bootctl สามารถใช้รายการค่าต่อไปนี้โดยคั่นด้วยเครื่องหมายจุลภาค:

  • memtag: เปิดใช้งาน MTE พื้นที่ผู้ใช้อย่างต่อเนื่อง (ตั้งค่า MISC_MEMTAG_MODE_MEMTAG )
  • memtag-once: เปิดใช้งาน MTE พื้นที่ผู้ใช้หนึ่งครั้ง (ตั้งค่า MISC_MEMTAG_MODE_MEMTAG_ONCE )
  • memtag-kernel: เปิดใช้งาน MTE พื้นที่เคอร์เนล (ตั้งค่า MISC_MEMTAG_MODE_MEMTAG_KERNEL )
  • memtag-kernel-once: เปิดใช้งาน MTE พื้นที่เคอร์เนลหนึ่งครั้ง ( MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE )
  • memtag-off: ปิดการใช้งาน MTE (ตั้งค่า MISC_MEMTAG_MODE_MEMTAG_OFF )

ต้องรีบูทระบบเพื่อให้การตั้งค่าใหม่มีผล (ตามที่ bootloader ใช้งาน)