פרטי גרסה בנכסי AVB

כדי לתמוך בקישור גרסאות של Keymaster, מערך האתחול של המכשיר אמור לספק את גרסת מערכת ההפעלה (OS) ואת רמת תיקון האבטחה של כל מחיצה. גרסת מערכת ההפעלה ורמת תיקון האבטחה הן שני צמדי מפתח/ערך נפרדים במאפייני AVB. לדוגמה:

  • com.android.build.system.os_version -> '12'
  • com.android.build.system.security_patch -> '2022-02-05'
  • com.android.build.vendor.os_version -> '12'
  • com.android.build.vendor.security_patch -> '2022-02-05'
  • com.android.build.boot.os_version -> '12'
  • com.android.build.boot.security_patch -> '2022-02-05'

אתחול המכשיר יכול לקבל את מאפייני ה-AVB האלה מקובץ אימג' של vbmeta באמצעות avb_property_lookup(). אפשר לטעון כמה קובצי אימג' של vbmeta באמצעות avb_slot_verify(), והם מאוחסנים בפרמטר הפלט AvbSlotVerifyData** out_data.

פורמט ברירת המחדל של פרטי הגרסה

כברירת מחדל, מערכת ההפעלה Android משתמשת בפורמט הבא עבור מערכת ההפעלה. ואת תיקון האבטחה בהתאמה.

הפורמט של com.android.build.${partition}.os_version הוא A[.B.C], לדוגמה, 12 או 12.0.0:

  • א: הגרסה הראשית
  • ב: הגרסה המשנית, ברירת המחדל היא אפס כשהיא חסרה
  • C: גרסה משנית משנית, ברירת המחדל היא אפס אם היא לא קיימת

הפורמט של com.android.build.${partition}.security_patch הוא YYYY-MM-DD.

כברירת מחדל, מערכת ה-build יוצרת את com.android.build.${partition}.security_patch למחיצות system,‏ system_ext ו-product. יצרן המכשיר אמור להגדיר את התיקונים BOOT_SECURITY_PATCH ו-VENDOR_SECURITY_PATCH ותיקונים אחרים למחיצות שאינן מחיצות מערכת. לדוגמה:

  • BOOT_SECURITY_PATCH := 2022-01-05 יוצר
    • com.android.build.boot.security_patch -> '2022-01-05'
  • VENDOR_SECURITY_PATCH := 2022-02-05 יוצר
    • com.android.build.vendor.security_patch -> '2022-02-05'

יצרן המכשיר יכול להגדיר את *_SECURITY_PATCH לערך $(PLATFORM_SECURITY_PATCH) אם הוא תמיד מעדכן את כל המחיצות לגרסה עם אותה רמה של תיקון אבטחה.

  • BOOT_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
  • VENDOR_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)

ציון פרטי גרסה מותאמים אישית

החל מ-Android 13, בכל גרסת build של מכשיר יכול להיות ערך מותאם אישית לגרסת מערכת ההפעלה שתוכנת האתחול של המכשיר יכולה לזהות. לדוגמה:

  • SYSTEM_OS_VERSION := 12.0.0 יוצר
    • com.android.build.system.os_version -> '12.0.0'
  • BOOT_OS_VERSION := a.b.c יוצר
    • com.android.build.boot.os_version -> 'a.b.c'
  • VENDOR_OS_VERSION := 12.0.1 יוצר
    • com.android.build.vendor.os_version -> '12.0.1'

פרטי הגרסה הלא תקפה בכותרת של קובץ האימג' לאתחול

החל מ-Android 9, Keymaster קישור גרסאות מציע להסיר את os_version מהכותרת boot.img.

לצורך השוואה, מתוארת כאן גם השיטה המיושנת לאחזור פרטי הגרסה מכותרת קובץ האימג' של האתחול. שימו לב ששדה os_version בכותרת האתחול משללב את גרסת מערכת ההפעלה ואת רמת תיקון האבטחה במספר שלם ללא סימן באורך 32 ביט. המנגנון הזה מניח שכל התמונות מיושנת לאחר מודולריזציה של מחיצות Project Trable

// Operating system version and security patch level.
// For version "A.B.C" and patch level "Y-M-D":
//   (7 bits for each of A, B, C; 7 bits for (Y-2000), 4 bits for M)
//   A = os_version[31:25]
//   B = os_version[24:18]
//   C = os_version[17:11]
//   Y = 2000 + os_version[10:4]
//   M = os-version[3:0]

uint32_t os_version;