summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaisuke Nojiri <dnojiri@chromium.org>2014-06-21 17:36:57 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-06-23 21:48:04 +0000
commit5b63803f6cfd55edb8cafa598aed9b9ec9d5211c (patch)
tree394d57ab9737f617b53e330afb7456c8ce28a252
parent539cbc27305b6aef9643adffc3297c7079fe7457 (diff)
downloadvboot-5b63803f6cfd55edb8cafa598aed9b9ec9d5211c.tar.gz
vboot2: Check necessity of recovery when firmware body hash fails to match
TEST=Booted Nyan Blaze and verified recovery is requested. BUG=None BRANCH=none Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Change-Id: I076e9714de4b853973cadad9a02a35d28431790c Reviewed-on: https://chromium-review.googlesource.com/205156 Commit-Queue: Daisuke Nojiri <dnojiri@chromium.org> Tested-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
-rw-r--r--firmware/2lib/2api.c3
-rw-r--r--firmware/2lib/2misc.c1
2 files changed, 4 insertions, 0 deletions
diff --git a/firmware/2lib/2api.c b/firmware/2lib/2api.c
index 0138669d..e1a06230 100644
--- a/firmware/2lib/2api.c
+++ b/firmware/2lib/2api.c
@@ -291,5 +291,8 @@ int vb2api_check_hash(struct vb2_context *ctx)
vb2_signature_data(&pre->body_signature),
digest,
&wb);
+ if (rv)
+ vb2_fail(ctx, VB2_RECOVERY_RO_INVALID_RW, rv);
+
return rv;
}
diff --git a/firmware/2lib/2misc.c b/firmware/2lib/2misc.c
index 685cf07d..f5571dc6 100644
--- a/firmware/2lib/2misc.c
+++ b/firmware/2lib/2misc.c
@@ -95,6 +95,7 @@ void vb2_fail(struct vb2_context *ctx, uint8_t reason, uint8_t subcode)
* If recovery is already requested, it's a more specific error code
* than later code is providing and we shouldn't overwrite it.
*/
+ VB2_DEBUG("Both slots are bad. Need recovery\n");
if (!vb2_nv_get(ctx, VB2_NV_RECOVERY_REQUEST)) {
vb2_nv_set(ctx, VB2_NV_RECOVERY_REQUEST, reason);
vb2_nv_set(ctx, VB2_NV_RECOVERY_SUBCODE, subcode);