การรองรับ Bootloader ของ MTE

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

การรองรับ Bootloader

หากต้องการรองรับ 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 เป็นเท็จ บูตโหลดเดอร์จะต่อท้าย arm64.nomte ในบรรทัดคำสั่งของเคอร์เนล

หาก memtag_kernel เป็นจริง Bootloader จะต่อท้าย kasan=on ในบรรทัดคำสั่งของเคอร์เนล มิเช่นนั้น ระบบจะ ต่อท้าย kasan=off

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พร็อพเพอร์ตี้ของระบบเพื่อระบุ ให้ระบบทราบว่า Bootloader รองรับข้อความ memtag

ส่วนติดต่อผู้ใช้

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

พร็อพเพอร์ตี้ของระบบ

สำหรับการใช้งานขั้นสูง พร็อพเพอร์ตี้ของระบบ arm64.memtag.bootctl สามารถใช้รายการที่คั่นด้วยคอมมาของค่าต่อไปนี้ ได้

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

คุณต้องรีบูตระบบเพื่อให้การตั้งค่าใหม่มีผล (เนื่องจาก Bootloader เป็นผู้ใช้การตั้งค่า)