Informasi versi di properti AVB

Untuk mendukung pengikatan versi KeyMint (sebelumnya Keymaster), bootloader perangkat diharapkan memberikan versi sistem operasi (OS) dan tingkat patch keamanan untuk setiap partisi. Versi OS dan tingkat patch keamanan adalah dua pasangan kunci-nilai terpisah dalam properti AVB. Contoh:

  • 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'

Bootloader perangkat dapat mengambil properti AVB tersebut dari image vbmeta menggunakan avb_property_lookup(). Beberapa image vbmeta dapat dimuat oleh avb_slot_verify() dan disimpan dalam AvbSlotVerifyData** out_data parameter output.

Format default informasi versi

Secara default, sistem build Android menggunakan format berikut untuk versi OS dan patch keamanan.

Format com.android.build.${partition}.os_version adalah A[.B.C], misalnya, 12 atau 12.0.0:

  • A: versi utama
  • B: versi minor, defaultnya adalah nol jika tidak ada
  • C: versi sub-minor, defaultnya nol jika tidak ada

Format com.android.build.${partition}.security_patch adalah YYYY-MM-DD.

Secara default, sistem build menghasilkan com.android.build.${partition}.security_patch untuk partisi system, system_ext, dan product. Produsen perangkat diharapkan menyetel BOOT_SECURITY_PATCH, VENDOR_SECURITY_PATCH, dan patch lainnya untuk partisi non-sistem. Contoh:

  • BOOT_SECURITY_PATCH := 2022-01-05 menghasilkan
    • com.android.build.boot.security_patch -> '2022-01-05'
  • VENDOR_SECURITY_PATCH := 2022-02-05 menghasilkan
    • com.android.build.vendor.security_patch -> '2022-02-05'

Produsen perangkat dapat menyetel *_SECURITY_PATCH ke $(PLATFORM_SECURITY_PATCH) jika selalu mengupdate semua partisi ke versi dengan tingkat patch keamanan yang sama.

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

Menentukan informasi versi kustom

Mulai Android 13, setiap build perangkat dapat memiliki nilai kustom untuk versi OS yang dapat dikenali oleh bootloader perangkat. Contoh:

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

Informasi versi yang sudah tidak berlaku di header image booting

Di Android 9 dan yang lebih tinggi, pengikatan versi Keymaster 4 menyarankan penghapusan os_version dari header boot.img.

Sebagai perbandingan, penggunaan yang sudah tidak berlaku untuk mendapatkan informasi versi dari header image boot juga dijelaskan di sini. Perhatikan bahwa kolom os_version di header booting menggabungkan versi OS dan tingkat patch keamanan ke dalam bilangan bulat 32-bit yang tidak bertanda tangan. Selain itu, mekanisme ini mengasumsikan bahwa semua gambar akan diperbarui bersama-sama, yang tidak berlaku lagi setelah modularisasi partisi di Project Treble.

// 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;