Hỗ trợ MTE Bootloader

Android 13 giới thiệu ABI cho không gian người dùng để truyền đạt chế độ MTE được yêu cầu tới bộ nạp khởi động. Điều này có thể được sử dụng để 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ị đi kèm với nó.

Hỗ trợ bộ nạp khởi động

Để hỗ trợ ABI này, bộ nạp 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 misc_memtag_message hợp lệ ( MISC_VIRTUAL_AB_MAGIC_HEADER khớp và số phiên bản được hỗ trợ), bộ nạp 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à cài đặt bật/tắt thẻ nhớ mặc định cho SKU. Nếu memtag đúng, bộ nạp khởi động sẽ thiết lập việc đặt trước thẻ MTE, cho phép kiểm tra thẻ ở các mức ngoại lệ thấp hơn và truyền vùng dành riêng cho thẻ tới kernel thông qua DT. Nếu memtag sai, bộ nạp khởi động sẽ thêm arm64.nomte vào dòng lệnh kernel.

Nếu memtag_kernel đúng, bộ nạp khởi động sẽ thêm kasan=on vào dòng lệnh kernel.

Bộ tải khởi động PHẢI xóa MISC_MEMTAG_MODE_MEMTAG_ONCEMISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE trên mỗi lần khởi động.

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

Bạn nên định cấu hình sản phẩm của mình để xây dựng 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 hệ thống biết rằng bộ nạp khởi động của bạn hỗ trợ thông báo memtag.

Giao diện người dùng

Khi thuộc tính ro.arm64.memtag.bootctl_supported được đặt, một nút trong menu Tùy chọn nhà phát triển 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 việ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 của tùy chọn 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ác giá trị sau đượ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: 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 kernel (đặt MISC_MEMTAG_MODE_MEMTAG_KERNEL )
  • memtag-kernel-once: bật MTE không gian kernel một lần ( MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE )
  • memtag-off: tắt MTE (đặt MISC_MEMTAG_MODE_MEMTAG_OFF )

Hệ thống phải được khởi động lại để cài đặt mới có hiệu lực (vì nó được áp dụng bởi bộ nạp khởi động).