cmd: tpm: Fix flush command
authormario.six@gdsys.cc <mario.six@gdsys.cc>
Mon, 20 Mar 2017 09:28:29 +0000 (10:28 +0100)
committerSimon Glass <sjg@chromium.org>
Sun, 26 Mar 2017 19:22:58 +0000 (13:22 -0600)
Commit 7690be35de ("lib: tpm: Add command to flush resources") added a command
to flush resources from a TPM.

However, a previous development version was accidentially used to generate the
patch, resulting in a non-functional command.

This patch fixes the flush command.

Signed-off-by: Mario Six <mario.six@gdsys.cc>
Reviewed-by: Simon Glass <sjg@chromium.org>
cmd/tpm.c

index 91bd20da25360ab7e96ba2f2e1600b5ab3c76f10..e3d26b714cf24de92de260e79b1adf90fd6512aa 100644 (file)
--- a/cmd/tpm.c
+++ b/cmd/tpm.c
@@ -691,31 +691,36 @@ static int do_tpm_flush(cmd_tbl_t *cmdtp, int flag, int argc,
 {
        int type = 0;
 
-       if (argc != 2)
+       if (argc != 3)
                return CMD_RET_USAGE;
 
-       if (strcasecmp(argv[1], "key"))
+       if (!strcasecmp(argv[1], "key"))
                type = TPM_RT_KEY;
-       else if (strcasecmp(argv[1], "auth"))
+       else if (!strcasecmp(argv[1], "auth"))
                type = TPM_RT_AUTH;
-       else if (strcasecmp(argv[1], "hash"))
+       else if (!strcasecmp(argv[1], "hash"))
                type = TPM_RT_HASH;
-       else if (strcasecmp(argv[1], "trans"))
+       else if (!strcasecmp(argv[1], "trans"))
                type = TPM_RT_TRANS;
-       else if (strcasecmp(argv[1], "context"))
+       else if (!strcasecmp(argv[1], "context"))
                type = TPM_RT_CONTEXT;
-       else if (strcasecmp(argv[1], "counter"))
+       else if (!strcasecmp(argv[1], "counter"))
                type = TPM_RT_COUNTER;
-       else if (strcasecmp(argv[1], "delegate"))
+       else if (!strcasecmp(argv[1], "delegate"))
                type = TPM_RT_DELEGATE;
-       else if (strcasecmp(argv[1], "daa_tpm"))
+       else if (!strcasecmp(argv[1], "daa_tpm"))
                type = TPM_RT_DAA_TPM;
-       else if (strcasecmp(argv[1], "daa_v0"))
+       else if (!strcasecmp(argv[1], "daa_v0"))
                type = TPM_RT_DAA_V0;
-       else if (strcasecmp(argv[1], "daa_v1"))
+       else if (!strcasecmp(argv[1], "daa_v1"))
                type = TPM_RT_DAA_V1;
 
-       if (strcasecmp(argv[2], "all")) {
+       if (!type) {
+               printf("Resource type %s unknown.\n", argv[1]);
+               return -1;
+       }
+
+       if (!strcasecmp(argv[2], "all")) {
                uint16_t res_count;
                uint8_t buf[288];
                uint8_t *ptr;
@@ -725,8 +730,10 @@ static int do_tpm_flush(cmd_tbl_t *cmdtp, int flag, int argc,
                /* fetch list of already loaded resources in the TPM */
                err = tpm_get_capability(TPM_CAP_HANDLE, type, buf,
                                         sizeof(buf));
-               if (err)
+               if (err) {
+                       printf("tpm_get_capability returned error %d.\n", err);
                        return -1;
+               }
                res_count = get_unaligned_be16(buf);
                ptr = buf + 2;
                for (i = 0; i < res_count; ++i, ptr += 4)
@@ -734,8 +741,10 @@ static int do_tpm_flush(cmd_tbl_t *cmdtp, int flag, int argc,
        } else {
                uint32_t handle = simple_strtoul(argv[2], NULL, 0);
 
-               if (!handle)
+               if (!handle) {
+                       printf("Illegal resource handle %s\n", argv[2]);
                        return -1;
+               }
                tpm_flush_specific(cpu_to_be32(handle), type);
        }