From 926664c9a034a2d3dd1d0ab9e3df5802cf5a6693 Mon Sep 17 00:00:00 2001 From: Jason Zhu Date: Sat, 30 Jan 2021 10:23:15 +0800 Subject: [PATCH] lib: avb: reduce write rollback index operations The optee is used to storage security data in U-Boot, and a file which occupy 16KB is created when write a rollback index. But the security space is only 512KB, the sapce is not enough when write too many items. And here we write rollback index 32 times, but the avb only use rollback_index_location 0 to verify the rollback index with vbmeta. So just get the rollback_index_location 0 in this process. Test: fastboot getvar at-vboot-state Error log: TEEC: reference out of data: -1 TEEC: Not enough space available in secure storage! Signed-off-by: Jason Zhu Change-Id: Id69b852553a4ef9111dabe6f23e25038b0928bb3 --- lib/avb/rk_avb_user/rk_avb_ops_user.c | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/lib/avb/rk_avb_user/rk_avb_ops_user.c b/lib/avb/rk_avb_user/rk_avb_ops_user.c index 0ce3457bb3..c396eb193c 100644 --- a/lib/avb/rk_avb_user/rk_avb_ops_user.c +++ b/lib/avb/rk_avb_user/rk_avb_ops_user.c @@ -309,7 +309,6 @@ int rk_avb_read_all_rollback_index(char *buffer) uint64_t stored_rollback_index = 0; AvbIOResult io_ret; char temp[ROLLBACK_MAX_SIZE] = {0}; - int n; ops = avb_ops_user_new(); if (ops == NULL) { @@ -317,19 +316,17 @@ int rk_avb_read_all_rollback_index(char *buffer) return -1; } - for (n = 0; n < AVB_MAX_NUMBER_OF_ROLLBACK_INDEX_LOCATIONS; n++) { - io_ret = ops->read_rollback_index( - ops, n, &stored_rollback_index); - if (io_ret != AVB_IO_RESULT_OK) - goto out; - snprintf(temp, sizeof(int) + 1, "%d", n); - strncat(buffer, temp, ROLLBACK_MAX_SIZE); - strncat(buffer, ":", 1); - snprintf(temp, sizeof(uint64_t) + 1, "%lld", - stored_rollback_index); - strncat(buffer, temp, ROLLBACK_MAX_SIZE); - strncat(buffer, ",", 1); - } + /* Actually the rollback_index_location 0 is used. */ + io_ret = ops->read_rollback_index(ops, 0, &stored_rollback_index); + if (io_ret != AVB_IO_RESULT_OK) + goto out; + snprintf(temp, sizeof(int) + 1, "%d", 0); + strncat(buffer, temp, ROLLBACK_MAX_SIZE); + strncat(buffer, ":", 1); + snprintf(temp, sizeof(uint64_t) + 1, "%lld", + stored_rollback_index); + strncat(buffer, temp, ROLLBACK_MAX_SIZE); + strncat(buffer, ",", 1); io_ret = ops->read_rollback_index(ops,