diff options
Diffstat (limited to 'firmware/2lib/2secdata.c')
-rw-r--r-- | firmware/2lib/2secdata.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/firmware/2lib/2secdata.c b/firmware/2lib/2secdata.c index 0c5a34e4..c2983e71 100644 --- a/firmware/2lib/2secdata.c +++ b/firmware/2lib/2secdata.c @@ -42,27 +42,22 @@ int vb2_secdata_create(struct vb2_context *ctx) int vb2_secdata_init(struct vb2_context *ctx) { struct vb2_shared_data *sd = vb2_get_sd(ctx); - struct vb2_secdata *sec = (struct vb2_secdata *)ctx->secdata; int rv; - /* Data must be new enough to have a CRC */ - if (sec->struct_version < 2) - return VB2_ERROR_SECDATA_VERSION; - rv = vb2_secdata_check_crc(ctx); if (rv) return rv; + /* Set status flag */ + sd->status |= VB2_SD_STATUS_SECDATA_INIT; + // TODO: unit test for that + /* Read this now to make sure crossystem has it even in rec mode. */ rv = vb2_secdata_get(ctx, VB2_SECDATA_VERSIONS, &sd->fw_version_secdata); if (rv) return rv; - /* Set status flag */ - sd->status |= VB2_SD_STATUS_SECDATA_INIT; - // TODO: unit test for that - return VB2_SUCCESS; } @@ -72,6 +67,9 @@ int vb2_secdata_get(struct vb2_context *ctx, { struct vb2_secdata *sec = (struct vb2_secdata *)ctx->secdata; + if (!(vb2_get_sd(ctx)->status & VB2_SD_STATUS_SECDATA_INIT)) + return VB2_ERROR_SECDATA_GET_UNINITIALIZED; + switch(param) { case VB2_SECDATA_FLAGS: *dest = sec->flags; @@ -93,6 +91,9 @@ int vb2_secdata_set(struct vb2_context *ctx, struct vb2_secdata *sec = (struct vb2_secdata *)ctx->secdata; uint32_t now; + if (!(vb2_get_sd(ctx)->status & VB2_SD_STATUS_SECDATA_INIT)) + return VB2_ERROR_SECDATA_SET_UNINITIALIZED; + /* If not changing the value, don't regenerate the CRC. */ if (vb2_secdata_get(ctx, param, &now) == VB2_SUCCESS && now == value) return VB2_SUCCESS; |