การรองรับ Bootloader ของ MTE

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 ภาพหน้าจอแสดงตัวเลือกสำหรับนักพัฒนาซอฟต์แวร์ 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)