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

Android 13 giới thiệu một ABI cho không gian người dùng để truyền đạt chế độ MTE được yêu cầu cho trình tải khởi động. Bạn có thể dùng tuỳ chọn này để bật MTE trên những thiết bị có hỗ trợ phần cứng nhưng không được cài đặt sẵn MTE theo mặc định, hoặc để tắt MTE trên những thiết bị có cài đặt sẵn MTE.

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

Để hỗ trợ ABI này, trình tải khởi động của bạn 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 một misc_memtag_message hợp lệ (MISC_MEMTAG_MAGIC_HEADER trùng khớp và số phiên bản được hỗ trợ), thì trình tải khởi động sẽ tính toán như sau:

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 mặc định để bật hoặc tắt memtag cho SKU. Nếu memtagtrue, thì trình tải khởi động sẽ thiết lập chế độ đặt trước thẻ MTE, bật các chế độ kiểm tra thẻ ở cấp độ ngoại lệ thấp hơn và truyền đạt vùng được đặt trước thẻ cho nhân bằng devicetree (DT). Nếu memtagfalse, thì trình tải khởi động sẽ thêm arm64.nomte vào dòng lệnh của hạt nhân.

Nếu memtag_kerneltrue, thì trình tải khởi động sẽ thêm kasan=on vào dòng lệnh của nhân. Nếu không, hàm này sẽ nối kasan=off.

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ì đối số on sẽ đặt cờ MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} thành (1, 0, 0) và đối số off sẽ đặt cờ này thành (0, 0, 1), đồng thời giữ nguyên các cờ khác.

Đị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, lựa chọn Reboot with MTE (Khởi động lại bằng MTE) trong trình đơn Developer Options (Tuỳ chọn cho nhà phát triển) cho phép bạn khởi động lại một lần khi đã bật MTE. Đối tượng mục tiêu của hướng dẫn này là những nhà phát triển ứng dụng muốn kiểm thử ứng dụng của họ bằng MTE.

Tuỳ chọn cho nhà phát triển MTE

Hình 1. Tuỳ chọn 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ể nhận một danh sách các giá trị sau đây được phân tách bằng dấu phẩy:

  • memtag liên tục bật MTE không gian người dùng (đặt MISC_MEMTAG_MODE_MEMTAG).
  • memtag-once cho phép MTE không gian người dùng một lần (đặt MISC_MEMTAG_MODE_MEMTAG_ONCE).
  • memtag-kernel cho phép MTE ở không gian nhân (đặt MISC_MEMTAG_MODE_MEMTAG_KERNEL).
  • memtag-kernel-once bật MTE ở không gian nhân một lần (đặt MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE).
  • memtag-off vô hiệu hoá MTE (đặt MISC_MEMTAG_MODE_MEMTAG_OFF).

Trình tải khởi động sẽ áp dụng chế độ cài đặt này, vì vậy, hãy khởi động lại hệ thống sau khi bạn thực hiện thay đổi.