תמיכה בתוכנת אתחול MTE

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

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

כדי לתמוך ב-ABI הזה, תוכנת האתחול צריכה לקרוא את misc_memtag_message (שמוגדרת ב- bootloader_message.h) מהמחיצה misc. אם נמצא misc_memtag_message תקף (MISC_VIRTUAL_AB_MAGIC_HEADER תואם ומספר הגרסה נתמך), bootloader מחשב את

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 למק"ט. אם הערך של memtag הוא True, מנהל האתחול מגדיר שמירה של תג MTE, מפעיל בדיקות תגים ברמות החריגה הנמוכות יותר ומעביר את האזור ששמור לתגים לליבה דרך DT. אם הערך של memtag הוא false, מנהל האתחול מצרף את arm64.nomte לשורת הפקודה של הליבה.

אם הערך של memtag_kernel הוא true, מנהל האתחול מצרף את הערך 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), תוך שמירה על הדגלים האחרים.

צריך להגדיר את המוצר כך שייבנה קובץ ה-binary של mtectrl לתמיכה במרחב המשתמש. לאחר מכן, מגדירים את מאפיין המערכת ro.arm64.memtag.bootctl_supported כדי לציין למערכת שה-bootloader תומך בהודעת 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 במרחב הליבה (הגדרה של MISC_MEMTAG_MODE_MEMTAG_KERNEL)
  • memtag-kernel-once: הפעלת MTE במרחב הליבה פעם אחת (MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE)
  • memtag-off: השבתת MTE (הגדרה של MISC_MEMTAG_MODE_MEMTAG_OFF)

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