Informasi Versi di properti AVB

Untuk mendukung pengikatan versi Keymaster, bootloader perangkat diharapkan menyediakan versi sistem operasi (OS) dan tingkat patch keamanan untuk setiap partisi. Versi OS dan tingkat patch keamanan adalah dua pasangan kunci -> nilai yang terpisah di properti AVB . misalnya,

  • 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 bisa mendapatkan properti AVB tersebut dari gambar vbmeta melalui avb_property_lookup() . Beberapa gambar vbmeta dapat dimuat oleh avb_slot_verify() dan akan disimpan dalam parameter output out_data AvbSlotVerifyData** .

Format default dari informasi versi

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

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

  • A: versi utama
  • B: versi minor, default ke nol saat tidak ada
  • C: versi sub-minor, default ke nol saat tidak ada

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

Secara default, sistem build hanya akan menghasilkan com.android.build.${partition}.security_patch untuk partisi system , system_ext , dan product . Pabrikan perangkat diharapkan menyetel BOOT_SECURITY_PATCH , VENDOR_SECURITY_PATCH , dll., untuk partisi non-sistem. misalnya,

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

Pabrikan perangkat dapat menyetel *_SECURITY_PATCH ke $(PLATFORM_SECURITY_PATCH) jika ia akan selalu memperbarui semua partisi ke versi dengan tingkat patch keamanan yang sama.

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

Informasi versi usang di header gambar boot

Mulai dari Android 9, pengikatan versi Keymaster menyarankan untuk menghapus os_version dari header boot.img .

Sebagai perbandingan, penggunaan usang untuk mendapatkan informasi versi dari header image boot juga dijelaskan di sini. Perhatikan bahwa bidang os_version di header boot menggabungkan versi OS dan tingkat patch keamanan menjadi bilangan bulat tidak bertanda 32-bit. Dan mekanisme ini mengasumsikan bahwa semua gambar akan diperbarui bersama, yang sudah usang 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;