Minidiag: Commit NVRAM immediately right after cleaning diag request

Clean up the diag request flag to avoid potential reboot loop if somehow
a forced reboot occurs.

BRANCH=puff,zork,volteer,trogdor,dedede
BUG=b:177303714
TEST=CQ
TEST=FEATURES=test P2_TEST_FILTER='*' emerge-zork vboot_reference
TEST=boot to minidiag and then do hardware reset, then expect boot to
OS instead of boot to minidiag again.

Signed-off-by: Meng-Huan Yu <menghuan@chromium.org>
Change-Id: I24815d512ca42b78dc42cafaebc666e6a53db793
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/vboot_reference/+/2624110
Reviewed-by: Joel Kitching <kitching@chromium.org>
diff --git a/firmware/lib/vboot_api_kernel.c b/firmware/lib/vboot_api_kernel.c
index e2d1431..52d3f07 100644
--- a/firmware/lib/vboot_api_kernel.c
+++ b/firmware/lib/vboot_api_kernel.c
@@ -236,7 +236,13 @@
 			VB2_TRY(vb2_broken_recovery_menu(ctx));
 	} else if (DIAGNOSTIC_UI && vb2api_diagnostic_ui_enabled(ctx) &&
 		   vb2_nv_get(ctx, VB2_NV_DIAG_REQUEST)) {
+		/*
+		 * Need to clear the request flag and commit nvdata changes
+		 * immediately to avoid booting back into diagnostic tool when a
+		 * forced system reset occurs.
+		 */
 		vb2_nv_set(ctx, VB2_NV_DIAG_REQUEST, 0);
+		vb2ex_commit_data(ctx);
 
 		/* Diagnostic boot.  This has UI. */
 		VB2_TRY(vb2_diagnostic_menu(ctx));