תמיכה ב-MTE Bootloader

אנדרואיד 13 מציגה ABI למרחב משתמש כדי להעביר את מצב ה-MTE המבוקש למטען האתחול. זה יכול לשמש כדי להפעיל MTE במכשירים שיש להם תמיכה בחומרה אבל לא נשלחים עם MTE מופעל כברירת מחדל, או כדי להשבית MTE במכשירים שנשלחים איתו.

תמיכה בטעינת האתחול

כדי לתמוך ב-ABI זה, טוען האתחול שלך צריך לקרוא את 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 היא הגדרת ברירת המחדל של ה-mtag on/off עבור מק"ט. אם 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 כדי לציין למערכת כי טוען האתחול שלך תומך בהודעת memtag.

ממשק משתמש

כאשר המאפיין ro.arm64.memtag.bootctl_supported מוגדר, כפתור בתפריט אפשרויות המפתח מאפשר למשתמש לאתחל פעם אחת עם MTE מופעל. קהל היעד לכך הוא מפתחי אפליקציות שרוצים לבדוק את האפליקציות שלהם עם MTE. צילום מסך של אפשרות מפתח MTE.

מאפיין מערכת

לשימוש מתקדם, מאפיין המערכת arm64.memtag.bootctl יכול לקחת רשימה מופרדת בפסיקים של הערכים הבאים:

  • memtag: אפשר באופן קבוע MTE במרחב משתמש (הגדר MISC_MEMTAG_MODE_MEMTAG )
  • memtag-once: אפשר MTE במרחב משתמש פעם אחת (קבע MISC_MEMTAG_MODE_MEMTAG_ONCE )
  • memtag-kernel: אפשר MTE של kernel-space (הגדר MISC_MEMTAG_MODE_MEMTAG_KERNEL )
  • memtag-kernel-once: אפשר MTE של kernel-space פעם אחת ( MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE )
  • memtag-off: השבת MTE (הגדר MISC_MEMTAG_MODE_MEMTAG_OFF )

יש לאתחל את המערכת כדי שההגדרה החדשה תיכנס לתוקף (כפי שהיא מיושמת על ידי טוען האתחול).