การรองรับ 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_MEMTAG_MAGIC_HEADER ตรงกันและรองรับหมายเลขเวอร์ชัน) โปรแกรมโหลดระบบปฏิบัติการจะคำนวณดังนี้

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 ที่ Bootloader ระบุ หาก memtag เป็น true Bootloader จะตั้งค่าการจองแท็ก MTE เปิดใช้การตรวจสอบแท็กในระดับ ข้อยกเว้นที่ต่ำกว่า และสื่อสารภูมิภาคที่จองแท็กกับเคอร์เนลด้วย Device Tree (DT) หาก memtag เป็น false Bootloader จะ ต่อท้าย arm64.nomte ในบรรทัดคำสั่งของเคอร์เนล

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

Bootloader ต้องล้าง MISC_MEMTAG_MODE_MEMTAG_ONCE และ MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE ทุกครั้งที่บูต

หาก Bootloader รองรับ fastboot oem mte อาร์กิวเมนต์ on ควรตั้งค่าสถานะ MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} เป็น (1, 0, 0) และอาร์กิวเมนต์ off ควรตั้งค่าสถานะเป็น (0, 0, 1) ขณะที่ยังคงสถานะอื่นๆ ไว้

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

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

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

ตัวเลือกสำหรับนักพัฒนาแอป MTE

รูปที่ 1 เมนูนักพัฒนาแอป 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 จะใช้การตั้งค่านี้ ดังนั้นให้รีบูตระบบหลังจากทำการเปลี่ยนแปลง