Hỗ trợ trình tải khởi động MTE

Android 13 ra mắt một ABI cho không gian người dùng để thông báo chế độ MTE được yêu cầu cho trình tải khởi động. Bạn có thể dùng tính năng này để bật MTE trên các thiết bị có hỗ trợ phần cứng nhưng không bật MTE theo mặc định hoặc để tắt MTE trên các thiết bị có bật MTE.

Hỗ trợ trình tải khởi động

Để hỗ trợ ABI này, trình tải khởi động cần đọc misc_memtag_message (được xác định trong bootloader_message.h) từ phân vùng misc. Nếu tìm thấy misc_memtag_message hợp lệ (MISC_VIRTUAL_AB_MAGIC_HEADER khớp và số phiên bản được hỗ trợ), thì trình tải khởi động sẽ tính toán

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 là chế độ cài đặt bật/tắt thẻ nhớ mặc định cho SKU. Nếu memtag là true, trình tải khởi động sẽ thiết lập tính năng đặt trước thẻ MTE, bật tính năng kiểm tra thẻ ở các cấp độ ngoại lệ thấp hơn và thông báo vùng được đặt trước thẻ cho nhân qua DT. Nếu memtag là sai, trình tải khởi động sẽ thêm arm64.nomte vào dòng lệnh hạt nhân.

Nếu memtag_kernel là đúng, trình tải khởi động sẽ thêm kasan=on vào dòng lệnh hạt nhân.

Trình tải khởi động PHẢI xoá MISC_MEMTAG_MODE_MEMTAG_ONCEMISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE mỗi khi khởi động.

Nếu trình tải khởi động hỗ trợ fastboot oem mte, thì chế độ bật sẽ đặt MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} thành (1, 0, 0) và chế độ tắt sẽ đặt thành (0, 0, 1), trong khi vẫn giữ lại các cờ khác.

Bạn nên định cấu hình sản phẩm để tạo tệp nhị phân mtectrl để hỗ trợ không gian người dùng. Sau đó, hãy đặt thuộc tính hệ thống ro.arm64.memtag.bootctl_supported để cho hệ thống biết rằng trình tải khởi động của bạn hỗ trợ thông báo memtag.

Giao diện người dùng

Khi bạn đặt thuộc tính ro.arm64.memtag.bootctl_supported, một nút trong trình đơn Tuỳ chọn cho nhà phát triển sẽ cho phép người dùng khởi động lại một lần khi bật MTE. Đối tượng mục tiêu của lớp học này là các nhà phát triển ứng dụng muốn kiểm thử ứng dụng bằng MTE. Ảnh chụp màn hình tuỳ chọn dành cho nhà phát triển MTE.

Thuộc tính hệ thống

Để sử dụng nâng cao, thuộc tính hệ thống arm64.memtag.bootctl có thể lấy danh sách được phân tách bằng dấu phẩy của các giá trị sau:

  • memtag: liên tục bật MTE không gian người dùng (thiết lập MISC_MEMTAG_MODE_MEMTAG)
  • memtag-once: bật MTE không gian người dùng một lần (đặt MISC_MEMTAG_MODE_MEMTAG_ONCE)
  • memtag-kernel: bật MTE không gian hạt nhân (thiết lập MISC_MEMTAG_MODE_MEMTAG_KERNEL)
  • memtag-kernel-once: bật MTE không gian hạt nhân một lần (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)
  • memtag-off: tắt MTE (đặt MISC_MEMTAG_MODE_MEMTAG_OFF)

Bạn phải khởi động lại hệ thống để chế độ cài đặt mới có hiệu lực (vì chế độ này do trình tải khởi động áp dụng).