diff options
Diffstat (limited to 'meta/recipes-devtools/qemu/qemu/0007-tpm-backend-Add-new-api-to-read-backend-TpmInfo.patch')
-rw-r--r-- | meta/recipes-devtools/qemu/qemu/0007-tpm-backend-Add-new-api-to-read-backend-TpmInfo.patch | 293 |
1 files changed, 0 insertions, 293 deletions
diff --git a/meta/recipes-devtools/qemu/qemu/0007-tpm-backend-Add-new-api-to-read-backend-TpmInfo.patch b/meta/recipes-devtools/qemu/qemu/0007-tpm-backend-Add-new-api-to-read-backend-TpmInfo.patch deleted file mode 100644 index 6d79ac4d63..0000000000 --- a/meta/recipes-devtools/qemu/qemu/0007-tpm-backend-Add-new-api-to-read-backend-TpmInfo.patch +++ /dev/null @@ -1,293 +0,0 @@ -From 5f698395b5de1ab2826f5aad99d757ce31d7c95f Mon Sep 17 00:00:00 2001 -From: Amarnath Valluri <amarnath.valluri@intel.com> -Date: Mon, 6 Mar 2017 00:10:10 +0200 -Subject: [PATCH 07/12] tpm backend: Add new api to read backend TpmInfo - -TPM configuration options are backend implementation details and shall not be -part of base TPMBackend object, and these shall not be accessed directly outside -of the class, hence added a new interface method, get_tpm_options() to -TPMDriverOps., which shall be implemented by the derived classes to return -configured tpm options. - -A new tpm backend api - tpm_backend_query_tpm() which uses _get_tpm_options() to -prepare TpmInfo. - -Signed-off-by: Amarnath Valluri <amarnath.valluri@intel.com> -Reviewed-by: Stefan Berger <stefanb@linux.vnet.ibm.com> - -Upstream-Status: Backport[f59864ba3aedd26aef7c84545cc1e565caccebf7] ---- - backends/tpm.c | 15 +++++++++++-- - hw/tpm/tpm_passthrough.c | 51 +++++++++++++++++++++++++++----------------- - include/sysemu/tpm_backend.h | 15 +++++++++++-- - tpm.c | 32 +-------------------------- - 4 files changed, 59 insertions(+), 54 deletions(-) - -diff --git a/backends/tpm.c b/backends/tpm.c -index 8911597fab..de313c9d5a 100644 ---- a/backends/tpm.c -+++ b/backends/tpm.c -@@ -142,6 +142,19 @@ TPMVersion tpm_backend_get_tpm_version(TPMBackend *s) - return k->ops->get_tpm_version(s); - } - -+TPMInfo *tpm_backend_query_tpm(TPMBackend *s) -+{ -+ TPMInfo *info = g_new0(TPMInfo, 1); -+ TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s); -+ -+ info->id = g_strdup(s->id); -+ info->model = s->fe_model; -+ info->options = k->ops->get_tpm_options ? -+ k->ops->get_tpm_options(s) : NULL; -+ -+ return info; -+} -+ - static bool tpm_backend_prop_get_opened(Object *obj, Error **errp) - { - TPMBackend *s = TPM_BACKEND(obj); -@@ -196,8 +209,6 @@ static void tpm_backend_instance_finalize(Object *obj) - TPMBackend *s = TPM_BACKEND(obj); - - g_free(s->id); -- g_free(s->path); -- g_free(s->cancel_path); - tpm_backend_thread_end(s); - } - -diff --git a/hw/tpm/tpm_passthrough.c b/hw/tpm/tpm_passthrough.c -index 4c21e52b7c..84fc49a4d3 100644 ---- a/hw/tpm/tpm_passthrough.c -+++ b/hw/tpm/tpm_passthrough.c -@@ -30,6 +30,7 @@ - #include "tpm_int.h" - #include "hw/hw.h" - #include "hw/i386/pc.h" -+#include "qapi/clone-visitor.h" - #include "tpm_tis.h" - #include "tpm_util.h" - -@@ -49,7 +50,8 @@ - struct TPMPassthruState { - TPMBackend parent; - -- char *tpm_dev; -+ TPMPassthroughOptions *options; -+ const char *tpm_dev; - int tpm_fd; - bool tpm_executing; - bool tpm_op_canceled; -@@ -296,15 +298,14 @@ static TPMVersion tpm_passthrough_get_tpm_version(TPMBackend *tb) - * in Documentation/ABI/stable/sysfs-class-tpm. - * From /dev/tpm0 create /sys/class/misc/tpm0/device/cancel - */ --static int tpm_passthrough_open_sysfs_cancel(TPMBackend *tb) -+static int tpm_passthrough_open_sysfs_cancel(TPMPassthruState *tpm_pt) - { -- TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(tb); - int fd = -1; - char *dev; - char path[PATH_MAX]; - -- if (tb->cancel_path) { -- fd = qemu_open(tb->cancel_path, O_WRONLY); -+ if (tpm_pt->options->cancel_path) { -+ fd = qemu_open(tpm_pt->options->cancel_path, O_WRONLY); - if (fd < 0) { - error_report("Could not open TPM cancel path : %s", - strerror(errno)); -@@ -319,7 +320,7 @@ static int tpm_passthrough_open_sysfs_cancel(TPMBackend *tb) - dev) < sizeof(path)) { - fd = qemu_open(path, O_WRONLY); - if (fd >= 0) { -- tb->cancel_path = g_strdup(path); -+ tpm_pt->options->cancel_path = g_strdup(path); - } else { - error_report("tpm_passthrough: Could not open TPM cancel " - "path %s : %s", path, strerror(errno)); -@@ -339,17 +340,18 @@ static int tpm_passthrough_handle_device_opts(QemuOpts *opts, TPMBackend *tb) - const char *value; - - value = qemu_opt_get(opts, "cancel-path"); -- tb->cancel_path = g_strdup(value); -+ if (value) { -+ tpm_pt->options->cancel_path = g_strdup(value); -+ tpm_pt->options->has_cancel_path = true; -+ } - - value = qemu_opt_get(opts, "path"); -- if (!value) { -- value = TPM_PASSTHROUGH_DEFAULT_DEVICE; -+ if (value) { -+ tpm_pt->options->has_path = true; -+ tpm_pt->options->path = g_strdup(value); - } - -- tpm_pt->tpm_dev = g_strdup(value); -- -- tb->path = g_strdup(tpm_pt->tpm_dev); -- -+ tpm_pt->tpm_dev = value ? value : TPM_PASSTHROUGH_DEFAULT_DEVICE; - tpm_pt->tpm_fd = qemu_open(tpm_pt->tpm_dev, O_RDWR); - if (tpm_pt->tpm_fd < 0) { - error_report("Cannot access TPM device using '%s': %s", -@@ -370,10 +372,8 @@ static int tpm_passthrough_handle_device_opts(QemuOpts *opts, TPMBackend *tb) - tpm_pt->tpm_fd = -1; - - err_free_parameters: -- g_free(tb->path); -- tb->path = NULL; -- -- g_free(tpm_pt->tpm_dev); -+ qapi_free_TPMPassthroughOptions(tpm_pt->options); -+ tpm_pt->options = NULL; - tpm_pt->tpm_dev = NULL; - - return 1; -@@ -391,7 +391,7 @@ static TPMBackend *tpm_passthrough_create(QemuOpts *opts, const char *id) - goto err_exit; - } - -- tpm_pt->cancel_fd = tpm_passthrough_open_sysfs_cancel(tb); -+ tpm_pt->cancel_fd = tpm_passthrough_open_sysfs_cancel(tpm_pt); - if (tpm_pt->cancel_fd < 0) { - goto err_exit; - } -@@ -404,6 +404,17 @@ err_exit: - return NULL; - } - -+static TpmTypeOptions *tpm_passthrough_get_tpm_options(TPMBackend *tb) -+{ -+ TpmTypeOptions *options = g_new0(TpmTypeOptions, 1); -+ -+ options->type = TPM_TYPE_OPTIONS_KIND_PASSTHROUGH; -+ options->u.passthrough.data = QAPI_CLONE(TPMPassthroughOptions, -+ TPM_PASSTHROUGH(tb)->options); -+ -+ return options; -+} -+ - static const QemuOptDesc tpm_passthrough_cmdline_opts[] = { - TPM_STANDARD_CMDLINE_OPTS, - { -@@ -430,12 +441,14 @@ static const TPMDriverOps tpm_passthrough_driver = { - .get_tpm_established_flag = tpm_passthrough_get_tpm_established_flag, - .reset_tpm_established_flag = tpm_passthrough_reset_tpm_established_flag, - .get_tpm_version = tpm_passthrough_get_tpm_version, -+ .get_tpm_options = tpm_passthrough_get_tpm_options, - }; - - static void tpm_passthrough_inst_init(Object *obj) - { - TPMPassthruState *tpm_pt = TPM_PASSTHROUGH(obj); - -+ tpm_pt->options = g_new0(TPMPassthroughOptions, 1); - tpm_pt->tpm_fd = -1; - tpm_pt->cancel_fd = -1; - } -@@ -448,7 +461,7 @@ static void tpm_passthrough_inst_finalize(Object *obj) - - qemu_close(tpm_pt->tpm_fd); - qemu_close(tpm_pt->cancel_fd); -- g_free(tpm_pt->tpm_dev); -+ qapi_free_TPMPassthroughOptions(tpm_pt->options); - } - - static void tpm_passthrough_class_init(ObjectClass *klass, void *data) -diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h -index 9ea707253a..e96c1918cc 100644 ---- a/include/sysemu/tpm_backend.h -+++ b/include/sysemu/tpm_backend.h -@@ -49,10 +49,9 @@ struct TPMBackend { - TPMRecvDataCB *recv_data_callback; - bool had_startup_error; - -+ /* <public> */ - char *id; - enum TpmModel fe_model; -- char *path; -- char *cancel_path; - - QLIST_ENTRY(TPMBackend) list; - }; -@@ -96,6 +95,8 @@ struct TPMDriverOps { - int (*reset_tpm_established_flag)(TPMBackend *t, uint8_t locty); - - TPMVersion (*get_tpm_version)(TPMBackend *t); -+ -+ TpmTypeOptions *(*get_tpm_options)(TPMBackend *t); - }; - - -@@ -214,6 +215,16 @@ void tpm_backend_open(TPMBackend *s, Error **errp); - */ - TPMVersion tpm_backend_get_tpm_version(TPMBackend *s); - -+/** -+ * tpm_backend_query_tpm: -+ * @s: the backend -+ * -+ * Query backend tpm info -+ * -+ * Returns newly allocated TPMInfo -+ */ -+TPMInfo *tpm_backend_query_tpm(TPMBackend *s); -+ - TPMBackend *qemu_find_tpm(const char *id); - - const TPMDriverOps *tpm_get_backend_driver(const char *type); -diff --git a/tpm.c b/tpm.c -index 9f4f37da50..cac400ef3e 100644 ---- a/tpm.c -+++ b/tpm.c -@@ -203,36 +203,6 @@ static const TPMDriverOps *tpm_driver_find_by_type(enum TpmType type) - return be_drivers[type]; - } - --static TPMInfo *qmp_query_tpm_inst(TPMBackend *drv) --{ -- TPMInfo *res = g_new0(TPMInfo, 1); -- TPMPassthroughOptions *tpo; -- -- res->id = g_strdup(drv->id); -- res->model = drv->fe_model; -- res->options = g_new0(TpmTypeOptions, 1); -- -- switch (tpm_backend_get_type(drv)) { -- case TPM_TYPE_PASSTHROUGH: -- res->options->type = TPM_TYPE_OPTIONS_KIND_PASSTHROUGH; -- tpo = g_new0(TPMPassthroughOptions, 1); -- res->options->u.passthrough.data = tpo; -- if (drv->path) { -- tpo->path = g_strdup(drv->path); -- tpo->has_path = true; -- } -- if (drv->cancel_path) { -- tpo->cancel_path = g_strdup(drv->cancel_path); -- tpo->has_cancel_path = true; -- } -- break; -- case TPM_TYPE__MAX: -- break; -- } -- -- return res; --} -- - /* - * Walk the list of active TPM backends and collect information about them - * following the schema description in qapi-schema.json. -@@ -247,7 +217,7 @@ TPMInfoList *qmp_query_tpm(Error **errp) - continue; - } - info = g_new0(TPMInfoList, 1); -- info->value = qmp_query_tpm_inst(drv); -+ info->value = tpm_backend_query_tpm(drv); - - if (!cur_item) { - head = cur_item = info; --- -2.11.0 - |