Android 13 เปิดตัว ABI สําหรับพื้นที่ผู้ใช้เพื่อสื่อสาร ไปยัง Bootloader ซึ่งใช้เพื่อเปิดใช้ 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
เป็นเท็จ Bootloader จะเพิ่ม arm64.nomte ต่อท้ายฟังก์ชัน
บรรทัดคำสั่งของเคอร์เนล
หาก memtag_kernel
เป็นจริง Bootloader จะเพิ่มต่อท้าย
kasan=on
ไปยังบรรทัดคำสั่งของเคอร์เนล
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 ของ User-Space ตลอด (ตั้งค่า
MISC_MEMTAG_MODE_MEMTAG
) -
memtag-once: เปิดใช้ user-space MTE ครั้งเดียว (ตั้งค่า
MISC_MEMTAG_MODE_MEMTAG_ONCE
) -
memtag-kernel: เปิดใช้ kernel-space MTE (ตั้งค่า
MISC_MEMTAG_MODE_MEMTAG_KERNEL
) -
memtag-kernel-once: เปิดใช้ kernel-space MTE ครั้งเดียว
(
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
) -
memtag-off: ปิดใช้ MTE (ตั้งค่า
MISC_MEMTAG_MODE_MEMTAG_OFF
)
ต้องรีบูตระบบเพื่อให้การตั้งค่าใหม่มีผล (เนื่องจาก ที่ใช้โดย Bootloader)