การรองรับ 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 ตรงกันและรองรับหมายเลขเวอร์ชัน) 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 เป็น 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 ในเมนูตัวเลือกสำหรับนักพัฒนาแอปจะช่วยให้คุณรีบูตได้ 1 ครั้งโดยเปิดใช้ 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 จะใช้การตั้งค่านี้ ดังนั้นให้รีบูตระบบหลังจากทำการเปลี่ยนแปลง