VbError_t VbGbbReadHWID(struct vb2_context *ctx, char *hwid, uint32_t max_size) { struct vb2_shared_data *sd = vb2_get_sd(ctx); if (!max_size) return VBERROR_INVALID_PARAMETER; *hwid = '\0'; StrnAppend(hwid, "{INVALID}", max_size); if (!ctx) return VBERROR_INVALID_GBB; if (0 == sd->gbb->hwid_size) { VB2_DEBUG("VbHWID(): invalid hwid size\n"); return VBERROR_SUCCESS; /* oddly enough! */ } if (sd->gbb->hwid_size > max_size) { VB2_DEBUG("VbDisplayDebugInfo(): invalid hwid offset/size\n"); return VBERROR_INVALID_PARAMETER; } return VbGbbReadData(ctx, sd->gbb->hwid_offset, sd->gbb->hwid_size, hwid); }
static const char* DumpCgptAddParams(const CgptAddParams *params) { static char buf[256]; char tmp[64]; buf[0] = 0; snprintf(tmp, sizeof(tmp), "-i %d ", params->partition); StrnAppend(buf, tmp, sizeof(buf)); if (params->label) { snprintf(tmp, sizeof(tmp), "-l %s ", params->label); StrnAppend(buf, tmp, sizeof(buf)); } if (params->set_begin) { snprintf(tmp, sizeof(tmp), "-b %llu ", (unsigned long long)params->begin); StrnAppend(buf, tmp, sizeof(buf)); } if (params->set_size) { snprintf(tmp, sizeof(tmp), "-s %llu ", (unsigned long long)params->size); StrnAppend(buf, tmp, sizeof(buf)); } if (params->set_type) { GuidToStr(¶ms->type_guid, tmp, sizeof(tmp)); StrnAppend(buf, "-t ", sizeof(buf)); StrnAppend(buf, tmp, sizeof(buf)); StrnAppend(buf, " ", sizeof(buf)); } if (params->set_unique) { GuidToStr(¶ms->unique_guid, tmp, sizeof(tmp)); StrnAppend(buf, "-u ", sizeof(buf)); StrnAppend(buf, tmp, sizeof(buf)); StrnAppend(buf, " ", sizeof(buf)); } if (params->set_successful) { snprintf(tmp, sizeof(tmp), "-S %d ", params->successful); StrnAppend(buf, tmp, sizeof(buf)); } if (params->set_tries) { snprintf(tmp, sizeof(tmp), "-T %d ", params->tries); StrnAppend(buf, tmp, sizeof(buf)); } if (params->set_priority) { snprintf(tmp, sizeof(tmp), "-P %d ", params->priority); StrnAppend(buf, tmp, sizeof(buf)); } if (params->set_raw) { snprintf(tmp, sizeof(tmp), "-A 0x%x ", params->raw_value); StrnAppend(buf, tmp, sizeof(buf)); } StrnAppend(buf, "\n", sizeof(buf)); return buf; }
VbError_t VbDisplayDebugInfo(VbCommonParams *cparams, VbNvContext *vncptr) { VbSharedDataHeader *shared = (VbSharedDataHeader *)cparams->shared_data_blob; GoogleBinaryBlockHeader *gbb = cparams->gbb; char buf[DEBUG_INFO_SIZE] = ""; char sha1sum[SHA1_DIGEST_SIZE * 2 + 1]; char hwid[256]; uint32_t used = 0; VbPublicKey *key; VbError_t ret; uint32_t i; /* Redisplay current screen to overwrite any previous debug output */ VbDisplayScreen(cparams, disp_current_screen, 1, vncptr); /* Add hardware ID */ VbRegionReadHWID(cparams, hwid, sizeof(hwid)); used += StrnAppend(buf + used, "HWID: ", DEBUG_INFO_SIZE - used); used += StrnAppend(buf + used, hwid, DEBUG_INFO_SIZE - used); /* Add recovery reason */ used += StrnAppend(buf + used, "\nrecovery_reason: 0x", DEBUG_INFO_SIZE - used); used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, shared->recovery_reason, 16, 2); used += StrnAppend(buf + used, " ", DEBUG_INFO_SIZE - used); used += StrnAppend(buf + used, RecoveryReasonString(shared->recovery_reason), DEBUG_INFO_SIZE - used); /* Add VbSharedData flags */ used += StrnAppend(buf + used, "\nVbSD.flags: 0x", DEBUG_INFO_SIZE - used); used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, shared->flags, 16, 8); /* Add raw contents of VbNvStorage */ used += StrnAppend(buf + used, "\nVbNv.raw:", DEBUG_INFO_SIZE - used); for (i = 0; i < VBNV_BLOCK_SIZE; i++) { used += StrnAppend(buf + used, " ", DEBUG_INFO_SIZE - used); used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, vncptr->raw[i], 16, 2); } /* Add dev_boot_usb flag */ VbNvGet(vncptr, VBNV_DEV_BOOT_USB, &i); used += StrnAppend(buf + used, "\ndev_boot_usb: ", DEBUG_INFO_SIZE - used); used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, i, 10, 0); /* Add dev_boot_legacy flag */ VbNvGet(vncptr, VBNV_DEV_BOOT_LEGACY, &i); used += StrnAppend(buf + used, "\ndev_boot_legacy: ", DEBUG_INFO_SIZE - used); used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, i, 10, 0); /* Add dev_boot_signed_only flag */ VbNvGet(vncptr, VBNV_DEV_BOOT_SIGNED_ONLY, &i); used += StrnAppend(buf + used, "\ndev_boot_signed_only: ", DEBUG_INFO_SIZE - used); used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, i, 10, 0); /* Add TPM versions */ used += StrnAppend(buf + used, "\nTPM: fwver=0x", DEBUG_INFO_SIZE - used); used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, shared->fw_version_tpm, 16, 8); used += StrnAppend(buf + used, " kernver=0x", DEBUG_INFO_SIZE - used); used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, shared->kernel_version_tpm, 16, 8); /* Add GBB flags */ used += StrnAppend(buf + used, "\ngbb.flags: 0x", DEBUG_INFO_SIZE - used); if (gbb->major_version == GBB_MAJOR_VER && gbb->minor_version >= 1) { used += Uint64ToString(buf + used, DEBUG_INFO_SIZE - used, gbb->flags, 16, 8); } else { used += StrnAppend(buf + used, "0 (default)", DEBUG_INFO_SIZE - used); } /* Add sha1sum for Root & Recovery keys */ ret = VbGbbReadRootKey(cparams, &key); if (!ret) { FillInSha1Sum(sha1sum, key); VbExFree(key); used += StrnAppend(buf + used, "\ngbb.rootkey: ", DEBUG_INFO_SIZE - used); used += StrnAppend(buf + used, sha1sum, DEBUG_INFO_SIZE - used); } ret = VbGbbReadRecoveryKey(cparams, &key); if (!ret) { FillInSha1Sum(sha1sum, key); VbExFree(key); used += StrnAppend(buf + used, "\ngbb.recovery_key: ", DEBUG_INFO_SIZE - used); used += StrnAppend(buf + used, sha1sum, DEBUG_INFO_SIZE - used); } /* If we're in dev-mode, show the kernel subkey that we expect, too. */ if (0 == shared->recovery_reason) { FillInSha1Sum(sha1sum, &shared->kernel_subkey); used += StrnAppend(buf + used, "\nkernel_subkey: ", DEBUG_INFO_SIZE - used); used += StrnAppend(buf + used, sha1sum, DEBUG_INFO_SIZE - used); } /* Make sure we finish with a newline */ used += StrnAppend(buf + used, "\n", DEBUG_INFO_SIZE - used); /* TODO: add more interesting data: * - Information on current disks */ buf[DEBUG_INFO_SIZE - 1] = '\0'; return VbExDisplayDebugInfo(buf); }