From: Ashley Lai <ashley@ashleylai.com>
To: "Hon Ching(Vicky) Lo" <honclo@linux.vnet.ibm.com>
Cc: tpmdd-devel@lists.sourceforge.net,
Peter Huewe <PeterHuewe@gmx.de>,
Ashley Lai <ashley@ashleylai.com>,
Mimi Zohar <zohar@linux.vnet.ibm.com>,
Vicky Lo <honclo2014@gmail.com>,
linux-kernel@vger.kernel.org,
Joy Latten <jmlatten@linux.vnet.ibm.com>
Subject: Re: [PATCH 3/3] vTPM: support little endian guests
Date: Tue, 19 May 2015 16:08:09 -0500 (CDT) [thread overview]
Message-ID: <alpine.DEB.2.11.1505191533410.15762@ant> (raw)
In-Reply-To: <1430873486-25868-4-git-send-email-honclo@linux.vnet.ibm.com>
Thank you Vicky and Joy for the clarification. This patch mainly
converts the fields in the tcpa_event structure. I see the code converts
everytime it accesses the event fields. Would it be more efficient if you
do the conversion once and reuse them when needed? Could
convert_to_host_format(x) takes x as a tcpa_event structure?
If not you still can convert individual fields and reuse them. I'm aware
that the pcr_value field is type u8 and it does not need the conversion
but if convert_to_host_format() can convert the structure it shouldn't convert
u8 type I think.
> static const char* tcpa_event_type_strings[] = {
> "PREBOOT",
> @@ -82,9 +87,11 @@ static void *tpm_bios_measurements_start(struct seq_file *m, loff_t *pos)
> event = addr;
>
> if ((addr + sizeof(struct tcpa_event)) < limit) {
> - if (event->event_type == 0 && event->event_size == 0)
> + if ((convert_to_host_format(event->event_type) == 0) &&
> + (convert_to_host_format(event->event_size) == 0))
> return NULL;
> - addr += sizeof(struct tcpa_event) + event->event_size;
> + addr += (sizeof(struct tcpa_event) +
> + convert_to_host_format(event->event_size));
> }
> }
>
> @@ -94,8 +101,11 @@ static void *tpm_bios_measurements_start(struct seq_file *m, loff_t *pos)
>
> event = addr;
>
> - if ((event->event_type == 0 && event->event_size == 0) ||
> - ((addr + sizeof(struct tcpa_event) + event->event_size) >= limit))
> + if (((convert_to_host_format(event->event_type) == 0) &&
> + (convert_to_host_format(event->event_size) == 0))
> + ||
> + ((addr + sizeof(struct tcpa_event) +
> + convert_to_host_format(event->event_size)) >= limit))
> return NULL;
>
> return addr;
In this function, event_type and event_size can be converted
once and reuse.
> case SEPARATOR:
> case ACTION:
> - if (MAX_TEXT_EVENT > event->event_size) {
> + if (MAX_TEXT_EVENT >
> + convert_to_host_format(event->event_size)) {
> name = event_entry;
> - n_len = event->event_size;
> + n_len = convert_to_host_format(event->event_size);
> }
> break;
> case EVENT_TAG:
Same here.
> @@ -208,11 +229,43 @@ static int tpm_binary_bios_measurements_show(struct seq_file *m, void *v)
> struct tcpa_event *event = v;
> char *data = v;
> int i;
> -
> - for (i = 0; i < sizeof(struct tcpa_event) + event->event_size; i++)
> + u32 x;
> + char tmp[4];
> +
> + /* PCR */
> + x = convert_to_host_format(event->pcr_index);
> + memcpy(tmp, &x, 4);
> + for (i = 0; i < 4; i++)
> + seq_putc(m, tmp[i]);
> + data += 4;
> +
> + /* Event Type */
> + x = convert_to_host_format(event->event_type);
> + memcpy(tmp, &x, 4);
> + for (i = 0; i < 4; i++)
> + seq_putc(m, tmp[i]);
> + data += 4;
> +
> + /* HASH */
> + for (i = 0; i < 20; i++)
> seq_putc(m, data[i]);
> + data += 20;
> +
> + /* Size */
> + x = convert_to_host_format(event->event_size);
> + memcpy(tmp, &x, 4);
> + for (i = 0; i < 4; i++)
> + seq_putc(m, tmp[i]);
> + data += 4;
> +
> + /* Data */
> + if (convert_to_host_format(event->event_size)) {
> + for (i = 0; i < convert_to_host_format(event->event_size); i++)
> + seq_putc(m, data[i]);
> + }
>
> return 0;
> +
> }
If the tcpa_event structure is converted, you may be able to get away
with memcpy and the for loop.
Thanks,
--Ashley Lai
next prev parent reply other threads:[~2015-05-19 21:08 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-06 0:51 [PATCH 0/3] additional little endian support Hon Ching(Vicky) Lo
2015-05-06 0:51 ` [PATCH 1/3] vTPM: fixed the limit checking Hon Ching(Vicky) Lo
2015-05-11 13:02 ` [tpmdd-devel] " Stefan Berger
2015-05-12 21:19 ` Joy M. Latten
2015-05-06 0:51 ` [PATCH 2/3] TPM: remove unnecessary little endian conversion Hon Ching(Vicky) Lo
2015-05-06 0:51 ` [PATCH 3/3] vTPM: support little endian guests Hon Ching(Vicky) Lo
2015-05-08 22:31 ` Ashley Lai
2015-05-08 23:10 ` Hon Ching (Vicky) Lo
2015-05-11 22:07 ` Joy M. Latten
2015-05-19 21:08 ` Ashley Lai [this message]
2015-05-19 21:18 ` Ashley Lai
2015-05-20 21:23 ` Hon Ching (Vicky) Lo
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=alpine.DEB.2.11.1505191533410.15762@ant \
--to=ashley@ashleylai.com \
--cc=PeterHuewe@gmx.de \
--cc=honclo2014@gmail.com \
--cc=honclo@linux.vnet.ibm.com \
--cc=jmlatten@linux.vnet.ibm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tpmdd-devel@lists.sourceforge.net \
--cc=zohar@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.