پشتیبانی از بوت لودر MTE

اندروید ۱۳ یک ABI برای فضای کاربر معرفی می‌کند تا حالت MTE درخواستی را به بوت‌لودر منتقل کند. می‌توانید از این برای فعال کردن MTE در دستگاه‌هایی که پشتیبانی سخت‌افزاری دارند اما به طور پیش‌فرض با MTE فعال عرضه نمی‌شوند، یا غیرفعال کردن MTE در دستگاه‌هایی که با آن عرضه می‌شوند، استفاده کنید.

پشتیبانی از بوت لودر

برای پشتیبانی از این ABI، بوت‌لودر شما باید misc_memtag_message (تعریف شده در bootloader_message.h ) را از پارتیشن misc بخواند. اگر یک misc_memtag_message معتبر پیدا شود ( MISC_MEMTAG_MAGIC_HEADER مطابقت داشته باشد و شماره نسخه پشتیبانی شود)، بوت‌لودر به صورت زیر محاسبه می‌کند:

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 برابر با true باشد، بوت‌لودر رزرو تگ MTE را تنظیم می‌کند، بررسی تگ را در سطوح استثنای پایین‌تر فعال می‌کند و ناحیه رزرو شده تگ را با استفاده از devicetree (DT) به هسته اطلاع می‌دهد. اگر memtag برابر با false باشد، بوت‌لودر arm64.nomte را به خط فرمان هسته اضافه می‌کند.

اگر memtag_kernel true باشد، بوت‌لودر kasan=on را به خط فرمان هسته اضافه می‌کند. در غیر این صورت، kasan=off را اضافه می‌کند.

بوت لودر باید در هر بوت، MISC_MEMTAG_MODE_MEMTAG_ONCE و MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE را پاک کند.

اگر بوت لودر از fastboot oem mte پشتیبانی کند، آرگومان on باید پرچم‌های MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF} را روی (1, 0, 0) تنظیم کند و آرگومان off باید آنها را روی (0, 0, 1) تنظیم کند، در حالی که سایر پرچم‌ها حفظ شوند.

محصول خود را طوری پیکربندی کنید که فایل باینری mtectrl را برای پشتیبانی از فضای کاربری بسازد. و سپس ویژگی سیستمی ro.arm64.memtag.bootctl_supported را طوری تنظیم کنید که به سیستم نشان دهد بوت لودر شما از پیام memtag پشتیبانی می‌کند.

رابط کاربری

وقتی ویژگی ro.arm64.memtag.bootctl_supported تنظیم شده باشد، گزینه Reboot with MTE در منوی Developer Options به شما امکان می‌دهد یک بار با فعال بودن MTE سیستم را مجدداً راه‌اندازی کنید. مخاطب هدف این گزینه، توسعه‌دهندگان برنامه‌هایی هستند که می‌خواهند برنامه‌های خود را با MTE آزمایش کنند.

گزینه توسعه‌دهنده MTE

شکل ۱. گزینه توسعه‌دهنده MTE.

ویژگی سیستم

برای استفاده پیشرفته، ویژگی سیستمی arm64.memtag.bootctl می‌تواند لیستی از مقادیر زیر را که با کاما از هم جدا شده‌اند، بپذیرد:

  • memtag به طور مداوم MTE فضای کاربر را فعال می‌کند (تنظیم MISC_MEMTAG_MODE_MEMTAG ).
  • memtag-once یک بار MTE فضای کاربر را فعال می‌کند (تنظیم MISC_MEMTAG_MODE_MEMTAG_ONCE ).
  • memtag-kernel امکان MTE در فضای هسته را فراهم می‌کند (تنظیم MISC_MEMTAG_MODE_MEMTAG_KERNEL ).
  • memtag-kernel-once یک بار MTE در فضای هسته را فعال می‌کند (تنظیم MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE ).
  • memtag-off MTE را غیرفعال می‌کند ( MISC_MEMTAG_MODE_MEMTAG_OFF را تنظیم کنید).

این تنظیمات توسط بوت لودر اعمال می‌شود، بنابراین پس از اعمال تغییرات، سیستم را مجدداً راه‌اندازی کنید.