پشتیبانی از MTE Bootloader

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

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

برای پشتیبانی از این ABI، bootloader شما باید misc_memtag_message (تعریف شده در bootloader_message.h ) را از پارتیشن misc بخواند. اگر misc_memtag_message معتبری پیدا شد ( MISC_VIRTUAL_AB_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 درست باشد، بوت لودر رزرو تگ MTE را تنظیم می‌کند، بررسی برچسب‌ها را در سطوح استثنایی پایین‌تر فعال می‌کند و منطقه رزرو شده برچسب را از طریق DT به هسته ارتباط می‌دهد. اگر memtag نادرست باشد، بوت لودر arm64.nomte را به خط فرمان هسته اضافه می کند.

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

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

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

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

رابط کاربری

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

ویژگی سیستم

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

  • memtag: دائماً فضای کاربر MTE را فعال کنید ( MISC_MEMTAG_MODE_MEMTAG تنظیم کنید)
  • memtag-one: یک بار فضای کاربری MTE را فعال کنید ( MISC_MEMTAG_MODE_MEMTAG_ONCE تنظیم کنید)
  • memtag-kernel: فعال کردن kernel-space MTE (تنظیم MISC_MEMTAG_MODE_MEMTAG_KERNEL )
  • memtag-kernel-once: یک بار kernel-space MTE را فعال کنید ( MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE )
  • memtag-off: غیرفعال کردن MTE (تنظیم MISC_MEMTAG_MODE_MEMTAG_OFF )

برای اعمال تنظیمات جدید (همانطور که بوت لودر اعمال می کند) سیستم باید راه اندازی مجدد شود.