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

Android 13 ra mắt ABI cho không gian người dùng để truyền đạt thông tin được yêu cầu MTE 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 hỗ trợ MTE theo mặc định, hoặc tắt MTE trên các thiết bị có kèm theo 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) khỏi phân vùng misc. Nếu tìm thấy misc_memtag_message hợp lệ (Có MISC_VIRTUAL_AB_MAGIC_HEADER kết quả trùng khớp và số phiên bản này được hỗ trợ), trình tải khởi động sẽ tính toán

memtag = (default_memtag && !(Khác.memtag_mode và MISC_MEMTAG_MODE_MEMTAG_OFF)) ||
      Khác.memtag_mode & MISC_MEMTAG_MODE_MEMTAG ||
      Khác.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_ONCE

memtag_kernel = Khác.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL ||
      Khác.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE

default_memtag là chế độ cài đặt bật/tắt memtag mặc định cho SKU. Nếu memtag là true, trình tải khởi động sẽ thiết lập thẻ MTE đặt trước, cho phép kiểm tra thẻ ở các cấp ngoại lệ thấp hơn và truyền đạt khu vực dành riêng cho thẻ tới nhân hệ điều hành thông qua DT. Nếu memtag là false, trình tải khởi động sẽ thêm arm64.nomte vào dòng lệnh kernel.

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

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

Nếu trình tải khởi động hỗ trợ fastboot oem mte, thì trên tập hợp MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} đến (1, 0, 0) và đi đến (0, 0, 1), trong khi duy trì 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 đó, đặt Thuộc tính hệ thống ro.arm64.memtag.bootctl_supported để cho biết vào hệ thống mà 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, trong trình đơn Tuỳ chọn cho nhà phát triển cho phép người dùng khởi động lại một lần bằng MTE bật. Đối tượng mục tiêu của công cụ này là các nhà phát triển ứng dụng muốn thử nghiệm ứng dụng của họ bằng MTE. Ảnh chụp màn hình tuỳ chọn cho nhà phát triển MTE.

Thuộc tính hệ thống

Đối với trường hợp 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ác giá trị sau:

  • memtag: liên tục bật MTE không gian người dùng (đặt 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 kernel-space (đặt MISC_MEMTAG_MODE_MEMTAG_KERNEL)
  • memtag-kernel-once: bật MTE kernel-space một lần (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)
  • memtag-off: tắt MTE (set MISC_MEMTAG_MODE_MEMTAG_OFF)

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