diff options
author | Marc-André Lureau <marcandre.lureau@redhat.com> | 2017-11-06 19:39:11 +0100 |
---|---|---|
committer | Stefan Berger <stefanb@linux.vnet.ibm.com> | 2017-12-14 23:39:14 -0500 |
commit | bef2ed3fd2454586a7c1132ad574b891741d12c6 (patch) | |
tree | 6dd848d25b33fe14adc5671ef78965ac45f263aa /hw | |
parent | 8df4d8484f607d4973e66e93f2eba0b3f80c4238 (diff) | |
download | qemu-bef2ed3fd2454586a7c1132ad574b891741d12c6.zip qemu-bef2ed3fd2454586a7c1132ad574b891741d12c6.tar.gz qemu-bef2ed3fd2454586a7c1132ad574b891741d12c6.tar.bz2 |
tpm-passthrough: simplify create()
Use a similar code as tpm_emulator_create(), call handle_opts() and
handle failure cleanup with object_unref() in create().
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
Diffstat (limited to 'hw')
-rw-r--r-- | hw/tpm/tpm_passthrough.c | 36 |
1 files changed, 10 insertions, 26 deletions
diff --git a/hw/tpm/tpm_passthrough.c b/hw/tpm/tpm_passthrough.c index aa9167e..788be38 100644 --- a/hw/tpm/tpm_passthrough.c +++ b/hw/tpm/tpm_passthrough.c @@ -261,49 +261,33 @@ tpm_passthrough_handle_device_opts(TPMPassthruState *tpm_pt, QemuOpts *opts) if (tpm_pt->tpm_fd < 0) { error_report("Cannot access TPM device using '%s': %s", tpm_pt->tpm_dev, strerror(errno)); - goto err_free_parameters; + return -1; } if (tpm_util_test_tpmdev(tpm_pt->tpm_fd, &tpm_pt->tpm_version)) { error_report("'%s' is not a TPM device.", tpm_pt->tpm_dev); - goto err_close_tpmdev; + return -1; } - return 0; - - err_close_tpmdev: - qemu_close(tpm_pt->tpm_fd); - tpm_pt->tpm_fd = -1; - - err_free_parameters: - qapi_free_TPMPassthroughOptions(tpm_pt->options); - tpm_pt->options = NULL; - tpm_pt->tpm_dev = NULL; + tpm_pt->cancel_fd = tpm_passthrough_open_sysfs_cancel(tpm_pt); + if (tpm_pt->cancel_fd < 0) { + return -1; + } - return 1; + return 0; } static TPMBackend *tpm_passthrough_create(QemuOpts *opts) { Object *obj = object_new(TYPE_TPM_PASSTHROUGH); - TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(obj); - if (tpm_passthrough_handle_device_opts(tpm_pt, opts)) { - goto err_exit; - } - - tpm_pt->cancel_fd = tpm_passthrough_open_sysfs_cancel(tpm_pt); - if (tpm_pt->cancel_fd < 0) { - goto err_exit; + if (tpm_passthrough_handle_device_opts(TPM_PASSTHROUGH(obj), opts)) { + object_unref(obj); + return NULL; } return TPM_BACKEND(obj); - -err_exit: - object_unref(obj); - - return NULL; } static TpmTypeOptions *tpm_passthrough_get_tpm_options(TPMBackend *tb) |