All of lore.kernel.org
 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 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.