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....@gdsys.cc>
---
 cmd/tpm.c | 37 +++++++++++++++++++++++--------------
 1 file changed, 23 insertions(+), 14 deletions(-)

diff --git a/cmd/tpm.c b/cmd/tpm.c
index 91bd20da25..e3d26b714c 100644
--- 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);
        }
 
-- 
2.11.0

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot

Reply via email to