From: "Marc-André Lureau" <marcandre.lureau@redhat.com>
To: Stefan Berger <stefanb@linux.vnet.ibm.com>
Cc: qemu-devel@nongnu.org, amarnath.valluri@intel.com
Subject: Re: [Qemu-devel] [PATCH 1/5] tpm: Move getting TPM buffer size to backends
Date: Wed, 8 Nov 2017 17:21:10 +0100 [thread overview]
Message-ID: <20171108162110.GC13150@boraha> (raw)
In-Reply-To: <1510016336-4086-2-git-send-email-stefanb@linux.vnet.ibm.com>
On Mon, Nov 06, 2017 at 07:58:52PM -0500, Stefan Berger wrote:
> Rather than setting the size of the TPM buffer in the front-end,
> query the backend for the size of the buffer. In this patch we
> just move the hard-coded buffer size of 4096 to the backends.
>
> Signed-off-by: Stefan Berger <stefanb@linux.vnet.ibm.com>
> ---
> backends/tpm.c | 9 +++++++++
> hw/tpm/tpm_emulator.c | 6 ++++++
> hw/tpm/tpm_passthrough.c | 6 ++++++
> hw/tpm/tpm_tis.c | 12 +++++++-----
> include/sysemu/tpm_backend.h | 11 +++++++++++
> 5 files changed, 39 insertions(+), 5 deletions(-)
>
> diff --git a/backends/tpm.c b/backends/tpm.c
> index 7777467..e7d0f9a 100644
> --- a/backends/tpm.c
> +++ b/backends/tpm.c
> @@ -139,6 +139,15 @@ TPMVersion tpm_backend_get_tpm_version(TPMBackend *s)
> return k->get_tpm_version(s);
> }
>
> +uint32_t tpm_backend_get_buffer_size(TPMBackend *s)
We have a slight preference for size_t in qemu (even if underlying
protocol uses u32)
> +{
> + TPMBackendClass *k = TPM_BACKEND_GET_CLASS(s);
> +
> + assert(k->get_buffer_size);
No need to have assert here to be consitent with qemu code, however it
is nice to have a comment on the interface declaration instead.
(I considered all function pointers mandatory unless explicitely
marked optional, as in "tpm-be: update optional function pointers")
> +
> + return k->get_buffer_size(s);
> +}
> +
> TPMInfo *tpm_backend_query_tpm(TPMBackend *s)
> {
> TPMInfo *info = g_new0(TPMInfo, 1);
> diff --git a/hw/tpm/tpm_emulator.c b/hw/tpm/tpm_emulator.c
> index 24cb611..5a6107e 100644
> --- a/hw/tpm/tpm_emulator.c
> +++ b/hw/tpm/tpm_emulator.c
> @@ -356,6 +356,11 @@ static TPMVersion tpm_emulator_get_tpm_version(TPMBackend *tb)
> return tpm_emu->tpm_version;
> }
>
> +static uint32_t tpm_emulator_get_buffer_size(TPMBackend *tb)
> +{
> + return 4096;
> +}
> +
> static int tpm_emulator_block_migration(TPMEmulator *tpm_emu)
> {
> Error *err = NULL;
> @@ -556,6 +561,7 @@ static void tpm_emulator_class_init(ObjectClass *klass, void *data)
> tbc->get_tpm_established_flag = tpm_emulator_get_tpm_established_flag;
> tbc->reset_tpm_established_flag = tpm_emulator_reset_tpm_established_flag;
> tbc->get_tpm_version = tpm_emulator_get_tpm_version;
> + tbc->get_buffer_size = tpm_emulator_get_buffer_size;
> tbc->get_tpm_options = tpm_emulator_get_tpm_options;
>
> tbc->handle_request = tpm_emulator_handle_request;
> diff --git a/hw/tpm/tpm_passthrough.c b/hw/tpm/tpm_passthrough.c
> index 73554aa..7ff9249 100644
> --- a/hw/tpm/tpm_passthrough.c
> +++ b/hw/tpm/tpm_passthrough.c
> @@ -199,6 +199,11 @@ static TPMVersion tpm_passthrough_get_tpm_version(TPMBackend *tb)
> return tpm_pt->tpm_version;
> }
>
> +static uint32_t tpm_passthrough_get_buffer_size(TPMBackend *tb)
> +{
> + return 4096;
> +}
> +
> /*
> * Unless path or file descriptor set has been provided by user,
> * determine the sysfs cancel file following kernel documentation
> @@ -354,6 +359,7 @@ static void tpm_passthrough_class_init(ObjectClass *klass, void *data)
> tbc->reset_tpm_established_flag =
> tpm_passthrough_reset_tpm_established_flag;
> tbc->get_tpm_version = tpm_passthrough_get_tpm_version;
> + tbc->get_buffer_size = tpm_passthrough_get_buffer_size;
> tbc->get_tpm_options = tpm_passthrough_get_tpm_options;
> tbc->handle_request = tpm_passthrough_handle_request;
> }
> diff --git a/hw/tpm/tpm_tis.c b/hw/tpm/tpm_tis.c
> index cc32fcd..a3df40f 100644
> --- a/hw/tpm/tpm_tis.c
> +++ b/hw/tpm/tpm_tis.c
> @@ -88,6 +88,8 @@ typedef struct TPMState {
>
> TPMBackend *be_driver;
> TPMVersion be_tpm_version;
> +
> + uint32_t be_buffer_size;
> } TPMState;
>
> #define TPM(obj) OBJECT_CHECK(TPMState, (obj), TYPE_TPM_TIS)
> @@ -977,10 +979,9 @@ static int tpm_tis_do_startup_tpm(TPMState *s)
> return tpm_backend_startup_tpm(s->be_driver);
> }
>
> -static void tpm_tis_realloc_buffer(TPMSizedBuffer *sb)
> +static void tpm_tis_realloc_buffer(TPMSizedBuffer *sb,
> + uint32_t wanted_size)
> {
> - size_t wanted_size = 4096; /* Linux tpm.c buffer size */
> -
> if (sb->size != wanted_size) {
> sb->buffer = g_realloc(sb->buffer, wanted_size);
> sb->size = wanted_size;
> @@ -1007,6 +1008,7 @@ static void tpm_tis_reset(DeviceState *dev)
> int c;
>
> s->be_tpm_version = tpm_backend_get_tpm_version(s->be_driver);
> + s->be_buffer_size = tpm_backend_get_buffer_size(s->be_driver);
>
> tpm_backend_reset(s->be_driver);
>
> @@ -1033,9 +1035,9 @@ static void tpm_tis_reset(DeviceState *dev)
> s->loc[c].state = TPM_TIS_STATE_IDLE;
>
> s->loc[c].w_offset = 0;
> - tpm_tis_realloc_buffer(&s->loc[c].w_buffer);
> + tpm_tis_realloc_buffer(&s->loc[c].w_buffer, s->be_buffer_size);
> s->loc[c].r_offset = 0;
> - tpm_tis_realloc_buffer(&s->loc[c].r_buffer);
> + tpm_tis_realloc_buffer(&s->loc[c].r_buffer, s->be_buffer_size);
> }
>
> tpm_tis_do_startup_tpm(s);
> diff --git a/include/sysemu/tpm_backend.h b/include/sysemu/tpm_backend.h
> index 590e8b4..d23cef2 100644
> --- a/include/sysemu/tpm_backend.h
> +++ b/include/sysemu/tpm_backend.h
> @@ -80,6 +80,7 @@ struct TPMBackendClass {
> int (*reset_tpm_established_flag)(TPMBackend *t, uint8_t locty);
>
> TPMVersion (*get_tpm_version)(TPMBackend *t);
> + uint32_t (*get_buffer_size)(TPMBackend *t);
>
> TpmTypeOptions *(*get_tpm_options)(TPMBackend *t);
>
> @@ -183,6 +184,16 @@ int tpm_backend_reset_tpm_established_flag(TPMBackend *s, uint8_t locty);
> TPMVersion tpm_backend_get_tpm_version(TPMBackend *s);
>
> /**
> + * tpm_backend_get_buffer_size:
> + * @s: the backend to call into
> + *
> + * Get the TPM's buffer size.
> + *
> + * Returns buffer size.
> + */
> +uint32_t tpm_backend_get_buffer_size(TPMBackend *s);
> +
> +/**
> * tpm_backend_query_tpm:
> * @s: the backend
> *
> --
> 2.5.5
>
>
Looks good to me otherwise,
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
next prev parent reply other threads:[~2017-11-08 16:21 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-07 0:58 [Qemu-devel] [PATCH 0/5] tpm: Match frontend and backend buffer sizes (not 2.11) Stefan Berger
2017-11-07 0:58 ` [Qemu-devel] [PATCH 1/5] tpm: Move getting TPM buffer size to backends Stefan Berger
2017-11-08 16:21 ` Marc-André Lureau [this message]
2017-11-08 18:19 ` Stefan Berger
2017-11-07 0:58 ` [Qemu-devel] [PATCH 2/5] tpm: pull tpm_util_send() out of tpm_util_test() Stefan Berger
2017-11-08 16:22 ` Marc-André Lureau
2017-11-07 0:58 ` [Qemu-devel] [PATCH 3/5] tpm: tpm_passthrough: Read the buffer size from the host device Stefan Berger
2017-11-07 12:28 ` Stefan Berger
2017-11-08 16:18 ` Marc-André Lureau
2017-11-07 0:58 ` [Qemu-devel] [PATCH 4/5] tpm: tpm_emulator: get and set buffer size of device Stefan Berger
2017-11-08 16:22 ` Marc-André Lureau
2017-11-08 17:50 ` Stefan Berger
2017-11-07 0:58 ` [Qemu-devel] [PATCH 5/5] tpm: tpm_passthrough: Fail startup if FE buffer size < BE buffer size Stefan Berger
2017-11-08 16:22 ` Marc-André Lureau
2017-11-08 18:20 ` Stefan Berger
2017-11-08 16:20 ` [Qemu-devel] [PATCH 0/5] tpm: Match frontend and backend buffer sizes (not 2.11) Marc-André Lureau
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20171108162110.GC13150@boraha \
--to=marcandre.lureau@redhat.com \
--cc=amarnath.valluri@intel.com \
--cc=qemu-devel@nongnu.org \
--cc=stefanb@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.