mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
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

  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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®