Android 13 เปิดตัว ABI สำหรับพื้นที่ผู้ใช้เพื่อสื่อสารโหมด MTE ที่ร้องขอไปยังโปรแกรมโหลดบูต ซึ่งสามารถใช้เพื่อเปิดใช้งาน MTE บนอุปกรณ์ที่มีการรองรับฮาร์ดแวร์แต่ไม่ได้มาพร้อมกับ MTE ที่เปิดใช้งานตามค่าเริ่มต้น หรือเพื่อปิดใช้งาน MTE บนอุปกรณ์ที่จัดส่งมาพร้อมกับมัน
การสนับสนุนบูตโหลดเดอร์
เพื่อรองรับ 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
เพื่อระบุให้ระบบทราบว่าโปรแกรมโหลดบูตของคุณรองรับข้อความ memtag
หน้าจอผู้ใช้
เมื่อตั้งค่าคุณสมบัติro.arm64.memtag.bootctl_supported
ปุ่มในเมนูตัวเลือกสำหรับนักพัฒนาจะอนุญาตให้ผู้ใช้รีบูตหนึ่งครั้งโดยเปิดใช้งาน MTE กลุ่มเป้าหมายคือนักพัฒนาแอปที่ต้องการทดสอบแอปของตนกับ MTE คุณสมบัติของระบบ
สำหรับการใช้งานขั้นสูง คุณสมบัติระบบ arm64.memtag.bootctl
สามารถใช้รายการค่าต่อไปนี้โดยคั่นด้วยเครื่องหมายจุลภาค:
- memtag: เปิดใช้งาน MTE พื้นที่ผู้ใช้อย่างต่อเนื่อง (ตั้งค่า
MISC_MEMTAG_MODE_MEMTAG
) - memtag-once: เปิดใช้งาน MTE พื้นที่ผู้ใช้หนึ่งครั้ง (ตั้งค่า
MISC_MEMTAG_MODE_MEMTAG_ONCE
) - memtag-kernel: เปิดใช้งาน MTE พื้นที่เคอร์เนล (ตั้งค่า
MISC_MEMTAG_MODE_MEMTAG_KERNEL
) - memtag-kernel-once: เปิดใช้งาน MTE พื้นที่เคอร์เนลหนึ่งครั้ง (
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
) - memtag-off: ปิดการใช้งาน MTE (ตั้งค่า
MISC_MEMTAG_MODE_MEMTAG_OFF
)
ต้องรีบูทระบบเพื่อให้การตั้งค่าใหม่มีผล (ตามที่ bootloader ใช้งาน)