Hi Heinrich, [...]
> > rc = tpm2_submit_command(dev, input_param_block, > > output_param_block, &resp_buf_size); > > @@ -714,19 +721,20 @@ efi_tcg2_get_active_pcr_banks(struct > > efi_tcg2_protocol *this, > > u32 *active_pcr_banks) > > { > > struct udevice *dev; > > - efi_status_t ret; > > + efi_status_t ret = EFI_INVALID_PARAMETER; > > > > EFI_ENTRY("%p, %p", this, active_pcr_banks); > > > > - if (!this || !active_pcr_banks) { > > - ret = EFI_INVALID_PARAMETER; > > + if (!this || !active_pcr_banks) > > goto out; > > - } > > - ret = tcg2_platform_get_tpm2(&dev); > > - if (ret != EFI_SUCCESS) > > + > > + if (tcg2_platform_get_tpm2(&dev)) > > EFI_INVALID_PARAMETER does not convey the problem type. > Should we return EFI_DEVICE_ERROR here? > > The authors of the specification only foresaw one or more of the > parameters being incorrect (EFI_INVALID_PARAMETER). I completely agree that the result is misleading. However, I'd prefer sticking to the spec for now and maybe add a comment? > > > + goto out; > > + > > + if (tcg2_get_active_pcr_banks(dev, active_pcr_banks)) > > EFI_DEVICE_ERROR? Same here Thanks for the qucik review! /Ilias > > Best regards > > Heinrich > > > goto out; > > > > - ret = tcg2_get_active_pcr_banks(dev, active_pcr_banks); > > + ret = EFI_SUCCESS; > > > > out: > > return EFI_EXIT(ret); > > @@ -852,14 +860,15 @@ static efi_status_t measure_event(struct udevice > > *dev, u32 pcr_index, > > u32 event_type, u32 size, u8 event[]) > > { > > struct tpml_digest_values digest_list; > > - efi_status_t ret; > > + efi_status_t ret = EFI_DEVICE_ERROR; > > + int rc; > > > > - ret = tcg2_create_digest(dev, event, size, &digest_list); > > - if (ret != EFI_SUCCESS) > > + rc = tcg2_create_digest(dev, event, size, &digest_list); > > + if (rc) > > goto out; > > > > - ret = tcg2_pcr_extend(dev, pcr_index, &digest_list); > > - if (ret != EFI_SUCCESS) > > + rc = tcg2_pcr_extend(dev, pcr_index, &digest_list); > > + if (rc) > > goto out; > > > > ret = tcg2_agile_log_append(pcr_index, event_type, &digest_list, > > @@ -901,10 +910,10 @@ static efi_status_t efi_init_event_log(void) > > struct tcg2_event_log elog; > > struct udevice *dev; > > efi_status_t ret; > > + int rc; > > > > - ret = tcg2_platform_get_tpm2(&dev); > > - if (ret != EFI_SUCCESS) > > - return ret; > > + if (tcg2_platform_get_tpm2(&dev)) > > + return EFI_DEVICE_ERROR; > > > > ret = efi_allocate_pool(EFI_BOOT_SERVICES_DATA, TPM2_EVENT_LOG_SIZE, > > (void **)&event_log.buffer); > > @@ -933,9 +942,11 @@ static efi_status_t efi_init_event_log(void) > > */ > > elog.log = event_log.buffer; > > elog.log_size = TPM2_EVENT_LOG_SIZE; > > - ret = tcg2_log_prepare_buffer(dev, &elog, false); > > - if (ret != EFI_SUCCESS) > > + rc = tcg2_log_prepare_buffer(dev, &elog, false); > > + if (rc) { > > + ret = (rc == -ENOBUFS) ? EFI_BUFFER_TOO_SMALL : > > EFI_DEVICE_ERROR; > > goto free_pool; > > + } > > > > event_log.pos = elog.log_position; > > > > @@ -1306,8 +1317,7 @@ efi_status_t efi_tcg2_measure_dtb(void *dtb) > > if (!is_tcg2_protocol_installed()) > > return EFI_SUCCESS; > > > > - ret = tcg2_platform_get_tpm2(&dev); > > - if (ret != EFI_SUCCESS) > > + if (tcg2_platform_get_tpm2(&dev)) > > return EFI_SECURITY_VIOLATION; > > > > rsvmap_size = size_of_rsvmap(dtb); > > @@ -1356,8 +1366,7 @@ efi_status_t > > efi_tcg2_measure_efi_app_invocation(struct efi_loaded_image_obj *ha > > if (tcg2_efi_app_invoked) > > return EFI_SUCCESS; > > > > - ret = tcg2_platform_get_tpm2(&dev); > > - if (ret != EFI_SUCCESS) > > + if (tcg2_platform_get_tpm2(&dev)) > > return EFI_SECURITY_VIOLATION; > > > > ret = tcg2_measure_boot_variable(dev); > > @@ -1406,9 +1415,8 @@ efi_status_t efi_tcg2_measure_efi_app_exit(void) > > if (!is_tcg2_protocol_installed()) > > return EFI_SUCCESS; > > > > - ret = tcg2_platform_get_tpm2(&dev); > > - if (ret != EFI_SUCCESS) > > - return ret; > > + if (tcg2_platform_get_tpm2(&dev)) > > + return EFI_SECURITY_VIOLATION; > > > > ret = measure_event(dev, 4, EV_EFI_ACTION, > > strlen(EFI_RETURNING_FROM_EFI_APPLICATION), > > @@ -1437,9 +1445,10 @@ efi_tcg2_notify_exit_boot_services(struct efi_event > > *event, void *context) > > goto out; > > } > > > > - ret = tcg2_platform_get_tpm2(&dev); > > - if (ret != EFI_SUCCESS) > > + if (tcg2_platform_get_tpm2(&dev)) { > > + ret = EFI_SECURITY_VIOLATION; > > goto out; > > + } > > > > ret = measure_event(dev, 5, EV_EFI_ACTION, > > strlen(EFI_EXIT_BOOT_SERVICES_INVOCATION), > > @@ -1469,9 +1478,8 @@ efi_status_t > > efi_tcg2_notify_exit_boot_services_failed(void) > > if (!is_tcg2_protocol_installed()) > > return EFI_SUCCESS; > > > > - ret = tcg2_platform_get_tpm2(&dev); > > - if (ret != EFI_SUCCESS) > > - goto out; > > + if (tcg2_platform_get_tpm2(&dev)) > > + return EFI_SECURITY_VIOLATION; > > > > ret = measure_event(dev, 5, EV_EFI_ACTION, > > strlen(EFI_EXIT_BOOT_SERVICES_INVOCATION), > > @@ -1551,8 +1559,7 @@ efi_status_t efi_tcg2_do_initial_measurement(void) > > if (!is_tcg2_protocol_installed()) > > return EFI_SUCCESS; > > > > - ret = tcg2_platform_get_tpm2(&dev); > > - if (ret != EFI_SUCCESS) > > + if (tcg2_platform_get_tpm2(&dev)) > > return EFI_SECURITY_VIOLATION; > > > > ret = tcg2_measure_secure_boot_variable(dev); > > @@ -1577,8 +1584,7 @@ efi_status_t efi_tcg2_register(void) > > struct efi_event *event; > > u32 err; > > > > - ret = tcg2_platform_get_tpm2(&dev); > > - if (ret != EFI_SUCCESS) { > > + if (tcg2_platform_get_tpm2(&dev)) { > > log_warning("Missing TPMv2 device for EFI_TCG_PROTOCOL\n"); > > return EFI_SUCCESS; > > } > > @@ -1586,6 +1592,7 @@ efi_status_t efi_tcg2_register(void) > > /* initialize the TPM as early as possible. */ > > err = tpm_auto_start(dev); > > if (err) { > > + ret = EFI_DEVICE_ERROR; > > log_err("TPM startup failed\n"); > > goto fail; > > } >