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

พร็อพเพอร์ตี้ของระบบ
สำหรับการใช้งานขั้นสูง พร็อพเพอร์ตี้ของระบบ
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 เป็นผู้ใช้การตั้งค่า)