[U-Boot] [PATCH v2 2/2] Add a cli command to test the TPM device.

Marek Vasut marek.vasut at gmail.com
Sat Oct 15 20:02:29 CEST 2011


On Saturday, October 15, 2011 05:39:08 AM Vadim Bendebury wrote:
> The command gets an arbitrary number of arguments (up to 30), which
> are interpreted as byte values and are feed into the TPM device after
> proper initialization. Then the return value and data of the TPM
> driver is examined.
> 

Dear Vadim Bendebury,

[...]

> diff --git a/common/cmd_tpm.c b/common/cmd_tpm.c
> new file mode 100644
> index 0000000..e008a78
> --- /dev/null
> +++ b/common/cmd_tpm.c
> @@ -0,0 +1,111 @@
> +/*
> + * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
> + * Released under the 2-clause BSD license.

Are we ok with this ? Also, you say something about GPL in the same comment?

> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * This program is free software; you can redistribute it and/or
> + * modify it under the terms of the GNU General Public License as
> + * published by the Free Software Foundation; either version 2 of
> + * the License, or (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +

[...]

> +		puts("Got TPM response:\n");
> +		for (i = 0; i < read_size; i++)
> +			printf(" %2.2x", tpm_buffer[i]);
> +		puts("\n");
> +		rv = 0;
> +	} else {
> +		puts("tpm command failed\n");
> +	}
> +	return rv;
> +}

You might want to use debug() where fitting ?

> +
> +static int do_tpm(cmd_tbl_t *cmdtp, int flag, int argc, char * const
> argv[]) +{
> +	int rv = 0;
> +
> +	/*
> +	 * Verify that in case it is present, the first argument, it is
> +	 * exactly one character in size.
> +	 */
> +	if (argc < 7) {
> +		puts("command should be at least six bytes in size\n");
> +		return ~0;

Ugh, return 1 isn't ok ? Using ~0 on int type is weird.

> +	}
> +
> +	if (tis_init()) {
> +		puts("tis_init() failed!\n");
> +		return ~0;
> +	}
> +
> +	if (tis_open()) {
> +		puts("tis_open() failed!\n");
> +		return ~0;
> +	}
> +
> +	rv = tpm_process(argc - 1, argv + 1);
> +
> +	if (!rv && tis_close()) {
> +		puts("tis_close() failed!\n");
> +		rv = ~0;

This doesn't make much sense, tis_close() might not be called under all 
circumstances, is it ok ?

> +	}
> +
> +	return rv;
> +}
> +
> +U_BOOT_CMD(tpm, MAX_TRANSACTION_SIZE, 1, do_tpm,
> +	   "tpm <data> [<data>]   - write data and read ressponse\n",
> +	   "send arbitrary data to the TPM and read the response"
> +);
> +
> +static void report_error(const char *msg)
> +{
> +	if (msg && *msg)

Uhm, you also check if first character is non-zero? why ?

> +		printf("%s\n", msg);
> +	cmd_usage(&__u_boot_cmd_tpm);

Two underscores aren't a good practice.

> +}

Cheers


More information about the U-Boot mailing list