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

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