From 462a2efd2fb2f0effcb56580f3e6e7c14a17d23a Mon Sep 17 00:00:00 2001 From: Joel Kitching Date: Fri, 14 Feb 2020 15:38:37 +0800 Subject: vboot: implement vb2api_get_recovery_reason This API function should be used rather than directly accessing vb2_shared_data.recovery_reason. BUG=b:124141368, chromium:1038260, chromium:957880 TEST=make clean && make runtests BRANCH=none Change-Id: I92c8f9a654400be69885a691b39c4b9e4e2031c1 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2055662 Reviewed-by: Julius Werner Commit-Queue: Joel Kitching Tested-by: Joel Kitching --- firmware/2lib/2misc.c | 5 +++++ firmware/2lib/include/2api.h | 10 ++++++++++ tests/vb2_misc_tests.c | 8 ++++++++ 3 files changed, 23 insertions(+) diff --git a/firmware/2lib/2misc.c b/firmware/2lib/2misc.c index b289f315..76062f89 100644 --- a/firmware/2lib/2misc.c +++ b/firmware/2lib/2misc.c @@ -443,3 +443,8 @@ int vb2api_need_reboot_for_display(struct vb2_context *ctx) } return 0; } + +uint32_t vb2api_get_recovery_reason(struct vb2_context *ctx) +{ + return vb2_get_sd(ctx)->recovery_reason; +} diff --git a/firmware/2lib/include/2api.h b/firmware/2lib/include/2api.h index 2a87ab12..0ad10bd7 100644 --- a/firmware/2lib/include/2api.h +++ b/firmware/2lib/include/2api.h @@ -765,6 +765,16 @@ int vb2api_is_developer_signed(struct vb2_context *ctx); */ int vb2api_need_reboot_for_display(struct vb2_context *ctx); +/** + * Get the current recovery reason. + * + * See enum vb2_nv_recovery in 2recovery_reasons.h. + * + * @param ctx Vboot context + * @return Current recovery reason. + */ +uint32_t vb2api_get_recovery_reason(struct vb2_context *ctx); + /*****************************************************************************/ /* APIs provided by the caller to verified boot */ diff --git a/tests/vb2_misc_tests.c b/tests/vb2_misc_tests.c index ac7671e2..5e2cb89a 100644 --- a/tests/vb2_misc_tests.c +++ b/tests/vb2_misc_tests.c @@ -785,6 +785,13 @@ static void clear_recovery_tests(void) 4, " subcode shifted"); } +static void get_recovery_reason_tests(void) +{ + reset_common_data(); + sd->recovery_reason = 4; + TEST_EQ(vb2api_get_recovery_reason(ctx), 4, "correct recovery reason"); +} + int main(int argc, char* argv[]) { init_workbuf_tests(); @@ -797,6 +804,7 @@ int main(int argc, char* argv[]) select_slot_tests(); need_reboot_for_display_tests(); clear_recovery_tests(); + get_recovery_reason_tests(); return gTestSuccess ? 0 : 255; } -- cgit v1.2.1