summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason Zhu <jason.zhu@rock-chips.com>2018-07-23 11:29:19 +0800
committerAmit Uttamchandani <amituttam@google.com>2018-07-25 11:16:36 -0700
commit98158f439eb4a433779679c19c5ae66c374801ee (patch)
tree37a77689d907b01e28dc534007bd37f5ad44b3eb
parent091deb511435e7be9d9bc6c0374d2bade8c17548 (diff)
downloadrk-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.c152
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