
Hi Roman,
On Sun, May 19, 2024 at 9:19 PM Roman Stratiienko r.stratiienko@gmail.com wrote:
AVB can reuse already loaded images instead of loading them from the disk.
The get_preloaded_partition now looks for the env. variables set by the 'abootimg load' to find the correct partition in RAM.
Signed-off-by: Roman Stratiienko r.stratiienko@gmail.com
common/avb_verify.c | 53 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+)
diff --git a/common/avb_verify.c b/common/avb_verify.c index cff9117d92..d2626e8844 100644 --- a/common/avb_verify.c +++ b/common/avb_verify.c @@ -6,6 +6,7 @@ #include <avb_verify.h> #include <blk.h> #include <cpu_func.h> +#include <env.h> #include <image.h> #include <malloc.h> #include <part.h> @@ -595,6 +596,55 @@ static AvbIOResult read_from_partition(AvbOps *ops, num_bytes, buffer, out_num_read, IO_READ); }
+#ifdef CONFIG_ANDROID_BOOT_IMAGE
Please use CONFIG_IS_ENABLED() macro
+/**
- get_preloaded_partition() - Gets the starting pointer of a partition that
- is pre-loaded in memory, and save it to |out_pointer|.
- If the partition is not pre-loaded in memory, the out_pointer shall not be
- modified.
- @ops: contains AVB ops handlers
- @partition: partition name, NUL-terminated UTF-8 string
- @num_bytes: amount of bytes to read
- @out_pointer: pointer to the starting address of the partition
- @out_num_bytes_preloaded: amount of bytes pre-loaded in memory
- @return:
Please follow [1]. I know that the whole file has this type of issues, I plan to fix it in the near future.
[1] https://www.kernel.org/doc/html/next/doc-guide/kernel-doc.html.
Should be "Return: AVB_IO_RESULT_OK, if partition was found or was not found"
AVB_IO_RESULT_OK, if partition was found or was not found
- */
+static AvbIOResult get_preloaded_partition(AvbOps *ops, const char *partition, size_t num_bytes,
uint8_t **out_pointer, size_t *out_num_bytes_preloaded)
+{
size_t partition_start = 0;
size_t partition_size = 0;
char env_name[64];
sprintf(env_name, "abootimg_%s_ptr", partition);
Please use more secure version snprintf()
partition_start = env_get_hex(env_name, 0);
sprintf(env_name, "abootimg_%s_size", partition);
partition_size = env_get_hex(env_name, 0);
if (partition_start == 0 || partition_size == 0)
return AVB_IO_RESULT_OK;
if (partition_size < num_bytes) {
printf("AVB: Preloaded partition %s size %zu is smaller than requested %zu\n",
partition, partition_size, num_bytes);
return AVB_IO_RESULT_ERROR_IO;
}
*out_pointer = (uint8_t *)partition_start;
*out_num_bytes_preloaded = partition_size;
printf("AVB: Using preloaded partition %s at %p\n", partition, *out_pointer);
return AVB_IO_RESULT_OK;
+} +#endif
/**
- write_to_partition() - writes N bytes to a partition identified by a string
- name
@@ -1043,6 +1093,9 @@ AvbOps *avb_ops_alloc(int boot_device) ops_data->ops.user_data = ops_data;
ops_data->ops.read_from_partition = read_from_partition;
+#ifdef CONFIG_ANDROID_BOOT_IMAGE
Please use CONFIG_IS_ENABLED() macro
ops_data->ops.get_preloaded_partition = get_preloaded_partition;
+#endif ops_data->ops.write_to_partition = write_to_partition; ops_data->ops.validate_vbmeta_public_key = validate_vbmeta_public_key; ops_data->ops.read_rollback_index = read_rollback_index; -- 2.40.1