diff options
author | Jason Zhu <jason.zhu@rock-chips.com> | 2018-07-23 11:29:19 +0800 |
---|---|---|
committer | Amit Uttamchandani <amituttam@google.com> | 2018-07-25 11:16:36 -0700 |
commit | 98158f439eb4a433779679c19c5ae66c374801ee (patch) | |
tree | 37a77689d907b01e28dc534007bd37f5ad44b3eb | |
parent | 091deb511435e7be9d9bc6c0374d2bade8c17548 (diff) | |
download | rk-u-boot-98158f439eb4a433779679c19c5ae66c374801ee.tar.gz |
lib: avb: change judgement value when read from rpmb
If the item is not existent, trust will return TEE_ERROR_GENERIC
TEE_ERROR_NO_DATA and TEE_ERROR_ITEM_NOT_FOUND. We initialize
the item when return these value.
TEST: fastboot getvar at-vboot-state
ERROR: avb-perm-attr-set=0
avb-locked=
avb-unlock-disabled=
Change-Id: I1bde99df0e97444c9ecace1ddf18284d71e50f91
Signed-off-by: Jason Zhu <jason.zhu@rock-chips.com>
-rw-r--r-- | lib/avb/rk_avb_user/rk_avb_ops_user.c | 152 |
1 files changed, 90 insertions, 62 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 fc5ed67a79..db0c45ce4e 100644 --- a/lib/avb/rk_avb_user/rk_avb_ops_user.c +++ b/lib/avb/rk_avb_user/rk_avb_ops_user.c @@ -164,24 +164,35 @@ static AvbIOResult read_rollback_index(AvbOps *ops, int ret; ret = trusty_read_rollback_index(rollback_index_location, out_rollback_index); - if (ret == TEE_ERROR_GENERIC) { + switch(ret) { + case TEE_SUCCESS: + ret = AVB_IO_RESULT_OK; + break; + case TEE_ERROR_GENERIC: + case TEE_ERROR_NO_DATA: + case TEE_ERROR_ITEM_NOT_FOUND: *out_rollback_index = 0; ret = trusty_write_rollback_index(rollback_index_location, *out_rollback_index); - if (ret != 0) { + if (ret) { printf("%s: init rollback index error\n", __FILE__); - return AVB_IO_RESULT_ERROR_IO; + ret = AVB_IO_RESULT_ERROR_IO; + } else { + ret = trusty_read_rollback_index(rollback_index_location, + out_rollback_index); + if (ret) + ret = AVB_IO_RESULT_ERROR_IO; + else + ret = AVB_IO_RESULT_OK; } - ret = trusty_read_rollback_index(rollback_index_location, - out_rollback_index); - if (ret == 0) - return AVB_IO_RESULT_OK; - } else if (ret == 0) { - return AVB_IO_RESULT_OK; - } else { - printf("trusty_read_rollback_index ret = %x\n", ret); - return AVB_IO_RESULT_ERROR_IO; + break; + default: + ret = AVB_IO_RESULT_ERROR_IO; + printf("%s: trusty_read_rollback_index failed", + __FILE__); } + + return ret; #endif } return AVB_IO_RESULT_ERROR_IO; @@ -208,22 +219,30 @@ static AvbIOResult read_is_device_unlocked(AvbOps *ops, bool *out_is_unlocked) int ret; ret = trusty_read_lock_state((uint8_t *)out_is_unlocked); - if (ret == TEE_ERROR_GENERIC) { + switch(ret) { + case TEE_SUCCESS: + ret = AVB_IO_RESULT_OK; + break; + case TEE_ERROR_GENERIC: + case TEE_ERROR_NO_DATA: + case TEE_ERROR_ITEM_NOT_FOUND: *out_is_unlocked = 1; if (trusty_write_lock_state(*out_is_unlocked)) { printf("%s: init lock state error\n", __FILE__); - return AVB_IO_RESULT_ERROR_IO; + ret = AVB_IO_RESULT_ERROR_IO; + } else { + ret = trusty_read_lock_state((uint8_t *)out_is_unlocked); + if(ret == 0) + ret = AVB_IO_RESULT_OK; + else + ret = AVB_IO_RESULT_ERROR_IO; } - - ret = trusty_read_lock_state((uint8_t *)out_is_unlocked); - if(ret == 0) - return 0; - } else if (ret == 0) { - return AVB_IO_RESULT_OK; - } else { - printf("read_is_device_unlocked ret = %x\n", ret); - return AVB_IO_RESULT_ERROR_IO; + break; + default: + ret = AVB_IO_RESULT_ERROR_IO; + printf("%s: trusty_read_lock_state failed\n", __FILE__); } + return ret; #endif } return AVB_IO_RESULT_ERROR_IO; @@ -297,9 +316,11 @@ static AvbIOResult avb_read_perm_attr(AvbAtxOps* atx_ops, { if (attributes != NULL) { #ifdef CONFIG_OPTEE_CLIENT - trusty_read_permanent_attributes((uint8_t *)attributes, - sizeof(struct AvbAtxPermanentAttributes)); - return AVB_IO_RESULT_OK; + if (trusty_read_permanent_attributes((uint8_t *)attributes, + sizeof(struct AvbAtxPermanentAttributes))) + return AVB_IO_RESULT_ERROR_IO; + else + return AVB_IO_RESULT_OK; #endif } @@ -534,23 +555,25 @@ int rk_avb_read_flash_lock_state(uint8_t *flash_lock_state) int ret; ret = trusty_read_flash_lock_state(flash_lock_state); - if (ret == TEE_ERROR_GENERIC) { + switch(ret) { + case TEE_SUCCESS: + break; + case TEE_ERROR_GENERIC: + case TEE_ERROR_NO_DATA: + case TEE_ERROR_ITEM_NOT_FOUND: *flash_lock_state = 1; if (trusty_write_flash_lock_state(*flash_lock_state)) { avb_error("trusty_write_flash_lock_state error!"); - return -1; + ret = -1; + } else { + ret = trusty_read_flash_lock_state(flash_lock_state); } - - ret = trusty_read_flash_lock_state(flash_lock_state); - - return ret; - } else if (ret == 0) { - return 0; - } else { - printf("%s line %d: avb_read_flash_lock_state ret = %x\n", - __FILE__, __LINE__, ret); - return -1; + break; + default: + printf("%s: trusty_read_flash_lock_state failed\n", __FILE__); } + + return ret; #else return -1; #endif @@ -590,23 +613,25 @@ int rk_avb_read_lock_state(uint8_t *lock_state) int ret; ret = trusty_read_lock_state(lock_state); - if (ret == TEE_ERROR_GENERIC) { + switch(ret) { + case TEE_SUCCESS: + break; + case TEE_ERROR_GENERIC: + case TEE_ERROR_NO_DATA: + case TEE_ERROR_ITEM_NOT_FOUND: *lock_state = 1; if (rk_avb_write_lock_state(*lock_state)) { avb_error("avb_write_lock_state error!"); - return -1; + ret = -1; + } else { + ret = trusty_read_lock_state(lock_state); } - - ret = trusty_read_lock_state(lock_state); - - return ret; - } else if (ret == 0) { - return 0; - } else { - printf("%s line %d: avb_read_lock_state ret = %x\n", - __FILE__, __LINE__, ret); - return -1; + break; + default: + printf("%s: trusty_read_lock_state failed\n", __FILE__); } + + return ret; #else return -1; #endif @@ -632,23 +657,26 @@ int rk_avb_read_perm_attr_flag(uint8_t *flag) int ret; ret = trusty_read_permanent_attributes_flag(flag); - if (ret != TEE_SUCCESS) { + switch(ret) { + case TEE_SUCCESS: + break; + case TEE_ERROR_GENERIC: + case TEE_ERROR_NO_DATA: + case TEE_ERROR_ITEM_NOT_FOUND: *flag = 0; if (rk_avb_write_perm_attr_flag(*flag)) { avb_error("avb_write_perm_attr_flag error!"); - return -1; + ret = -1; + } else { + ret = trusty_read_permanent_attributes_flag(flag); } - - ret = trusty_read_permanent_attributes_flag(flag); - - return ret; - } else if (ret == 0) { - return 0; - } else { - printf("%s line %d: avb_read_perm_attr_flag ret = %x\n", __FILE__, - __LINE__, ret); - return -1; + break; + default: + printf("%s: trusty_read_permanent_attributes_flag failed", + __FILE__); } + + return ret; #else return -1; #endif |