mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-24 10:14:55 +00:00
Add more recovery_reason codes
There are several places where the same recovery_reason was used to report slightly different points of failure. Let's create some new codes instead. Remember that recovery mode is handled by RO firmware, so if an updated RW firmware uses one of the new error codes, pressing TAB at the recovery screen will say "We have no idea what this means". That's not a bug. This CL deprecates the original codes, so the fact that the RO firmware doesn't recognize it just means it's a new code reported by a new RW BIOS. BUG=chromium-os:36562 TEST=manual BRANCH=parrot Run make && make runtests It should pass. You can test some of the error cases on actual hardware by using crossystem recovery_reason=86 reboot and pressing TAB at the recovery screen. For that example you should see the message recovery_reason: 0x56 TPM lock error in rewritable firmare Change-Id: I123c781e6c6f6fe0284c4fd49f5f5a855eece7df Reviewed-on: https://gerrit.chromium.org/gerrit/38652 Commit-Ready: Bill Richardson <wfrichar@chromium.org> Tested-by: Bill Richardson <wfrichar@chromium.org> Reviewed-by: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
@@ -92,9 +92,9 @@ uint32_t VbTryLoadKernel(VbCommonParams* cparams, LoadKernelParams* p,
|
||||
break;
|
||||
}
|
||||
|
||||
/* If we didn't succeed, don't return a disk handle */
|
||||
/* If we didn't find any good kernels, don't return a disk handle. */
|
||||
if (VBERROR_SUCCESS != retval) {
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_RW_NO_DISK);
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_RW_NO_KERNEL);
|
||||
p->disk_handle = NULL;
|
||||
}
|
||||
|
||||
@@ -499,13 +499,13 @@ VbError_t VbEcSoftwareSync(VbCommonParams* cparams) {
|
||||
rv = VbExEcHashRW(&ec_hash, &ec_hash_size);
|
||||
if (rv) {
|
||||
VBDEBUG(("VbEcSoftwareSync() - VbExEcHashRW() returned %d\n", rv));
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_EC_HASH);
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_EC_HASH_FAILED);
|
||||
return VBERROR_EC_REBOOT_TO_RO_REQUIRED;
|
||||
}
|
||||
if (ec_hash_size != SHA256_DIGEST_SIZE) {
|
||||
VBDEBUG(("VbEcSoftwareSync() - VbExEcHashRW() returned wrong size %d\n",
|
||||
ec_hash_size));
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_EC_HASH);
|
||||
VBDEBUG(("VbEcSoftwareSync() - VbExEcHashRW() says size %d, not %d\n",
|
||||
ec_hash_size, SHA256_DIGEST_SIZE));
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_EC_HASH_SIZE);
|
||||
return VBERROR_EC_REBOOT_TO_RO_REQUIRED;
|
||||
}
|
||||
|
||||
@@ -639,7 +639,7 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams* cparams,
|
||||
if (0 != tpm_status) {
|
||||
VBDEBUG(("Unable to get kernel versions from TPM\n"));
|
||||
if (!shared->recovery_reason) {
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_RW_TPM_ERROR);
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_RW_TPM_R_ERROR);
|
||||
retval = VBERROR_TPM_READ_KERNEL;
|
||||
goto VbSelectAndLoadKernel_exit;
|
||||
}
|
||||
@@ -729,7 +729,7 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams* cparams,
|
||||
tpm_status = RollbackKernelWrite(shared->kernel_version_tpm);
|
||||
if (0 != tpm_status) {
|
||||
VBDEBUG(("Error writing kernel versions to TPM.\n"));
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_RW_TPM_ERROR);
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_RW_TPM_W_ERROR);
|
||||
retval = VBERROR_TPM_WRITE_KERNEL;
|
||||
goto VbSelectAndLoadKernel_exit;
|
||||
}
|
||||
@@ -753,7 +753,7 @@ VbError_t VbSelectAndLoadKernel(VbCommonParams* cparams,
|
||||
if (0 != tpm_status) {
|
||||
VBDEBUG(("Error locking kernel versions.\n"));
|
||||
if (!shared->recovery_reason) {
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_RW_TPM_ERROR);
|
||||
VbSetRecoveryRequest(VBNV_RECOVERY_RW_TPM_L_ERROR);
|
||||
retval = VBERROR_TPM_LOCK_KERNEL;
|
||||
goto VbSelectAndLoadKernel_exit;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user