diff --git a/src/vendorcode/google/chromeos/vboot2/vboot_loader.c b/src/vendorcode/google/chromeos/vboot2/vboot_loader.c
index d6e760ac28..3c0d67e8b9 100644
--- a/src/vendorcode/google/chromeos/vboot2/vboot_loader.c
+++ b/src/vendorcode/google/chromeos/vboot2/vboot_loader.c
@@ -63,22 +63,6 @@ static int verstage_should_load(void)
 	return 0;
 }
 
-static void init_vb2_working_data(void)
-{
-	struct vb2_working_data *wd;
-	size_t work_size;
-
-	work_size = vb2_working_data_size();
-	wd = vboot_get_working_data();
-	memset(wd, 0, work_size);
-	/*
-	 * vboot prefers 16-byte alignment. This takes away 16 bytes
-	 * from the VBOOT2_WORK region, but the vboot devs said that's okay.
-	 */
-	wd->buffer_offset = ALIGN_UP(sizeof(*wd), 16);
-	wd->buffer_size = work_size - wd->buffer_offset;
-}
-
 static int vboot_active(struct asset *asset)
 {
 	struct vb2_working_data *wd;
@@ -87,10 +71,8 @@ static int vboot_active(struct asset *asset)
 	run_verification = verification_should_run();
 
 	if (run_verification) {
-		init_vb2_working_data();
 		verstage_main();
 	} else if (verstage_should_load()) {
-		init_vb2_working_data();
 		struct prog verstage =
 			PROG_INIT(ASSET_VERSTAGE,
 				CONFIG_CBFS_PREFIX "/verstage");
diff --git a/src/vendorcode/google/chromeos/vboot2/verstage.c b/src/vendorcode/google/chromeos/vboot2/verstage.c
index bc7846a37d..783d1b613b 100644
--- a/src/vendorcode/google/chromeos/vboot2/verstage.c
+++ b/src/vendorcode/google/chromeos/vboot2/verstage.c
@@ -209,6 +209,22 @@ static uint32_t extend_pcrs(struct vb2_context *ctx)
 	       tpm_extend_pcr(ctx, 1, HWID_DIGEST_PCR);
 }
 
+static void init_vb2_working_data(void)
+{
+	struct vb2_working_data *wd;
+	size_t work_size;
+
+	work_size = vb2_working_data_size();
+	wd = vboot_get_working_data();
+	memset(wd, 0, work_size);
+	/*
+	 * vboot prefers 16-byte alignment. This takes away 16 bytes
+	 * from the VBOOT2_WORK region, but the vboot devs said that's okay.
+	 */
+	wd->buffer_offset = ALIGN_UP(sizeof(*wd), 16);
+	wd->buffer_size = work_size - wd->buffer_offset;
+}
+
 /**
  * Verify and select the firmware in the RW image
  *
@@ -219,8 +235,10 @@ void verstage_main(void)
 {
 	struct vb2_context ctx;
 	struct region_device fw_main;
-	struct vb2_working_data *wd = vboot_get_working_data();
+	struct vb2_working_data *wd;
 	int rv;
+	init_vb2_working_data();
+	wd = vboot_get_working_data();
 	timestamp_add_now(TS_START_VBOOT);
 
 	/* Set up context and work buffer */