summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorYu Shan <shanyu@google.com>2017-08-31 15:12:43 +0800
committerJi Luo <ji.luo@nxp.com>2018-08-20 21:25:45 +0800
commitb92b0e1d49778cd31ac33d209fa064caa2bec6ef (patch)
tree2d6d8805fe415eaf806d02a8db4aa9af64049e3a /lib
parentd2275a5926ac2ff7e9f656ac7803de010b51e870 (diff)
[iot] Use Trusty OS handle RollbackIndex and lock status
Use Trusty OS AVB manager handle RollbackIndex and lock status into RPMB partition. Change-Id: Idfe7234cfa31b2169af59b64e00f028542c49240 Signed-off-by: Haoran.Wang <elven.wang@nxp.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/avb/fsl/fsl_avbkey.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/lib/avb/fsl/fsl_avbkey.c b/lib/avb/fsl/fsl_avbkey.c
index b12ed5cdcf..c3e7ddbe52 100644
--- a/lib/avb/fsl/fsl_avbkey.c
+++ b/lib/avb/fsl/fsl_avbkey.c
@@ -16,6 +16,9 @@
#include <mapmem.h>
#include <fsl_avb.h>
+#ifdef CONFIG_IMX_TRUSTY_OS
+#include <trusty/libtipc.h>
+#endif
#include "fsl_avbkey.h"
#include "fsl_public_key.h"
#include "fsl_atx_attributes.h"
@@ -968,11 +971,20 @@ AvbIOResult fsl_validate_vbmeta_public_key_rpmb(AvbOps* ops,
*/
AvbIOResult fsl_read_rollback_index_rpmb(AvbOps* ops, size_t rollback_index_slot,
uint64_t* out_rollback_index) {
+ AvbIOResult ret;
+#ifdef CONFIG_IMX_TRUSTY_OS
+ if (trusty_read_rollback_index(rollback_index_slot, out_rollback_index)) {
+ ERR("read rollback from Trusty error!");
+ ret = AVB_IO_RESULT_ERROR_IO;
+ } else {
+ ret = AVB_IO_RESULT_OK;
+ }
+ return ret;
+#else
kblb_hdr_t hdr;
kblb_tag_t *rbk;
uint64_t *extract_idx = NULL;
struct mmc *mmc_dev;
- AvbIOResult ret;
#ifdef CONFIG_AVB_ATX
static const uint32_t kTypeMask = 0xF000;
static const unsigned int kTypeShift = 12;
@@ -1016,7 +1028,7 @@ AvbIOResult fsl_read_rollback_index_rpmb(AvbOps* ops, size_t rollback_index_slot
}
#else
rbk = &hdr.rbk_tags[rollback_index_slot];
-#endif
+#endif /* CONFIG_AVB_ATX */
extract_idx = malloc(rbk->len);
if (extract_idx == NULL)
return AVB_IO_RESULT_ERROR_OOM;
@@ -1040,6 +1052,7 @@ fail:
if (extract_idx != NULL)
free(extract_idx);
return ret;
+#endif /* CONFIG_IMX_TRUSTY_OS */
}
/* Sets the rollback index corresponding to the slot given by
@@ -1053,11 +1066,20 @@ fail:
*/
AvbIOResult fsl_write_rollback_index_rpmb(AvbOps* ops, size_t rollback_index_slot,
uint64_t rollback_index) {
+ AvbIOResult ret;
+#ifdef CONFIG_IMX_TRUSTY_OS
+ if (trusty_write_rollback_index(rollback_index_slot, rollback_index)) {
+ ERR("write rollback from Trusty error!");
+ ret = AVB_IO_RESULT_ERROR_IO;
+ } else {
+ ret = AVB_IO_RESULT_OK;
+ }
+ return ret;
+#else
kblb_hdr_t hdr;
kblb_tag_t *rbk;
uint64_t *plain_idx = NULL;
struct mmc *mmc_dev;
- AvbIOResult ret;
#ifdef CONFIG_AVB_ATX
static const uint32_t kTypeMask = 0xF000;
static const unsigned int kTypeShift = 12;
@@ -1072,7 +1094,7 @@ AvbIOResult fsl_write_rollback_index_rpmb(AvbOps* ops, size_t rollback_index_slo
if ((rollback_index_slot & ~kTypeMask) >= AVB_MAX_NUMBER_OF_ROLLBACK_INDEX_LOCATIONS)
#else
if (rollback_index_slot >= AVB_MAX_NUMBER_OF_ROLLBACK_INDEX_LOCATIONS)
-#endif
+#endif /* CONFIG_AVB_ATX */
return AVB_IO_RESULT_ERROR_IO;
if ((mmc_dev = get_mmc()) == NULL) {
@@ -1100,7 +1122,7 @@ AvbIOResult fsl_write_rollback_index_rpmb(AvbOps* ops, size_t rollback_index_slo
}
#else
rbk = &hdr.rbk_tags[rollback_index_slot];
-#endif
+#endif /* CONFIG_AVB_ATX */
plain_idx = malloc(rbk->len);
if (plain_idx == NULL)
return AVB_IO_RESULT_ERROR_OOM;
@@ -1119,6 +1141,7 @@ fail:
if (plain_idx != NULL)
free(plain_idx);
return ret;
+#endif /* CONFIG_IMX_TRUSTY_OS */
}
#endif /* CONFIG_FSL_CAAM_KB */