Android 13 เปิดตัว ABI สำหรับพื้นที่ผู้ใช้เพื่อสื่อสารโหมด MTE ที่ขอไปยังโปรแกรมโหลดบูต ซึ่งสามารถใช้เพื่อเปิดใช้ MTE ในอุปกรณ์ที่รองรับฮาร์ดแวร์แต่ไม่ได้เปิดใช้ MTE โดยค่าเริ่มต้น หรือเพื่อปิดใช้ MTE ในอุปกรณ์ที่เปิดใช้ MTE อยู่แล้ว
การรองรับ Bootloader
หากต้องการรองรับ ABI นี้ Bootloader ของคุณต้องอ่าน misc_memtag_message
(กำหนดไว้ใน
bootloader_message.h) จากพาร์ติชัน misc
หากพบ misc_memtag_message
ที่ถูกต้อง (MISC_VIRTUAL_AB_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
คือการตั้งค่าเปิด/ปิดเมมแท็กเริ่มต้นสำหรับ SKU หาก memtag
เป็นจริง บูตโหลดเดอร์จะตั้งค่าการจองแท็ก MTE เปิดใช้การตรวจสอบแท็กในระดับข้อยกเว้นที่ต่ำกว่า และสื่อสารพื้นที่ที่จองไว้ของแท็กไปยังเคอร์เนลผ่าน DT หาก memtag
เป็นเท็จ บูตโหลดเดอร์จะเพิ่ม arm64.nomte ต่อท้ายบรรทัดคำสั่งเคอร์เนล
หาก memtag_kernel
เป็นจริง บูตโหลดเดอร์จะใส่ kasan=on
ต่อท้ายบรรทัดคำสั่งเคอร์เนล
Bootloader ต้องล้าง MISC_MEMTAG_MODE_MEMTAG_ONCE
และ MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
ทุกครั้งที่บูต
หากโปรแกรมโหลดบูตรองรับ fastboot oem mte
การตั้งค่า "เปิด" จะตั้งค่า MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}
เป็น (1, 0, 0)
และการตั้งค่า "ปิด" จะตั้งค่า MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}
เป็น (0, 0, 1)
โดยที่เก็บค่าแฟล็กอื่นๆ ไว้
คุณควรกำหนดค่าผลิตภัณฑ์เพื่อสร้างไบนารี mtectrl
เพื่อรองรับพื้นที่ผู้ใช้ จากนั้นตั้งค่าro.arm64.memtag.bootctl_supported
พร็อพเพอร์ตี้ของระบบเพื่อบ่งบอกให้ระบบทราบว่าบูตโหลดเดอร์ของคุณรองรับข้อความ memtag
ส่วนติดต่อผู้ใช้
เมื่อตั้งค่าพร็อพเพอร์ตี้ro.arm64.memtag.bootctl_supported
ปุ่มในเมนูตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์จะอนุญาตให้ผู้ใช้รีบูตได้ 1 ครั้งโดยเปิดใช้ MTE กลุ่มเป้าหมายของโปรแกรมนี้คือนักพัฒนาแอปที่ต้องการทดสอบแอปด้วย MTE

พร็อพเพอร์ตี้ของระบบ
สําหรับการใช้งานขั้นสูง พร็อพเพอร์ตี้ระบบ arm64.memtag.bootctl
จะใช้รายการค่าต่อไปนี้ที่คั่นด้วยคอมมาได้
-
memtag: เปิดใช้ MTE ในพื้นที่ผู้ใช้อย่างถาวร (set
MISC_MEMTAG_MODE_MEMTAG
) -
memtag-once: เปิดใช้ MTE ในพื้นที่ผู้ใช้เพียงครั้งเดียว (set
MISC_MEMTAG_MODE_MEMTAG_ONCE
) -
memtag-kernel: เปิดใช้ MTE ในพื้นที่เคอร์เนล (set
MISC_MEMTAG_MODE_MEMTAG_KERNEL
) -
memtag-kernel-once: เปิดใช้ MTE ของพื้นที่เคอร์เนลเพียงครั้งเดียว
(
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
) -
memtag-off: ปิดใช้ MTE (set
MISC_MEMTAG_MODE_MEMTAG_OFF
)
คุณต้องรีบูตระบบเพื่อให้การตั้งค่าใหม่มีผล (เนื่องจาก Bootloader จะใช้การตั้งค่านี้)