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

ב-Android 13 מוצג ABI למרחב המשתמש, כדי להעביר את מצב ה-MTE המבוקש לטוען האתחול. אפשר להשתמש בהגדרה הזו כדי להפעיל 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 במק"ט. אם memtag הוא true, תוכנת האתחול מגדירה שמירת תג MTE, מפעילה בדיקות תגים ברמות הנמוכות של החריגים ומעבירה את האזור השמור של התג לליבה באמצעות devicetree‏ (DT). אם הערך של memtag הוא false, אפליקציית תוכנת האתחול מוסיפה את arm64.nomte לשורת הפקודה של הליבה.

אם הערך של memtag_kernel הוא true, תוכנת האתחול מוסיפה את kasan=on לשורת הפקודה של הליבה. אחרת, הוא מוסיף את kasan=off.

ה-Bootloader צריך לנקות את 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 מוגדר, האפשרות הפעלה מחדש עם MTE בתפריט אפשרויות למפתחים מאפשרת להפעיל מחדש פעם אחת עם MTE מופעל. קהל היעד של המאמר הזה הוא מפתחי אפליקציות שרוצים לבדוק את האפליקציות שלהם באמצעות MTE.

אפשרות למפתחים של MTE

איור 1. אפשרות למפתחים ב-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).

ההגדרה מוחלת על ידי טוען האתחול, לכן צריך להפעיל מחדש את המערכת אחרי שמבצעים שינוי.