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
menghasilkancom.android.build.boot.security_patch -> '2022-01-05'
VENDOR_SECURITY_PATCH := 2022-02-05
menghasilkancom.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
menghasilkancom.android.build.system.os_version -> '12.0.0'
BOOT_OS_VERSION := a.b.c
menghasilkancom.android.build.boot.os_version -> 'a.b.c'
VENDOR_OS_VERSION := 12.0.1
menghasilkancom.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;