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

מאפיין מערכת
לשימוש מתקדם, מאפיין המערכת
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
)
כדי שההגדרה החדשה תיכנס לתוקף, צריך להפעיל מחדש את המערכת (כי היא מוחלת על ידי תוכנת האתחול).