blob: bfc43f33c39c73b8ea3fb7b6b124cb4440e56f77 [file] [log] [blame] [view]
# AVB resource manager
The AVB ([Android Verified Boot](https://android.googlesource.com/platform/external/avb))
resource manager is intended to provide tamper proof storage for data used by
[libavb](https://android.googlesource.com/platform/external/avb/+/master#Device-Integration).
This includes the verified boot lock state, stored rollback index values, and ATX
([Android Things eXtension](https://android.googlesource.com/platform/external/avb/+/master/libavb_atx/))
permanent attributes.
## Operations
### Reading/Writing Stored Rollback Indexes
Rollback indexes are strictly increasing, and any request to write a value to a
rollback index that is smaller than the existing value will fail. A mask
(0xF000) is used to map a rollback index to a file, and a file may contain a
maximum of 32 rollback indexes. For example, 0xF01F and 0x0001 are valid values
for the rollback index, but 0x10000 and 0x0020 are not.
### Reading/Writing Verified Boot Lock State
If the lock state is 1, or LOCKED, then verification errors are fatal, and
booting MUST fail. If the lock state is 0, or UNLOCKED, the device may boot
even when verification fails. When the device changes lock state, all stored
rollback indexes are cleared.
### Reading/Writing ATX Permanent Attributes
A hash of the
[attributes](https://android.googlesource.com/platform/external/avb/+/master/libavb_atx/avb_atx_types.h)
MUST be stored in write-once fuses. Once this is written, any subsequent
requests to write it will fail. Attributes are stored as an opaque buffer and
parsed by the bootloader.
### Locking Boot State
Once the AVB resource manager receives a LOCK_BOOT_STATE request, all requests
to write to resources will fail until the next reboot. This should be called
after libavb has acquired all necessary resources, and before the bootloader
passes control to the HLOS. This prevents a compromised HLOS from tampering
with AVB resources.
## Client Code
Since libavb is executed by the bootloader, the non-secure side API that
makes requests to the AVB resource manager is located
[here](https://android.googlesource.com/trusty/external/trusty/+/master/ql-tipc/).