qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 2/2] tpm_emulator: Translate TPM error codes to


From: Marc-André Lureau
Subject: Re: [Qemu-devel] [PATCH 2/2] tpm_emulator: Translate TPM error codes to strings
Date: Thu, 25 Jul 2019 15:08:57 +0400

Hi

On Thu, Jul 25, 2019 at 2:58 PM Stefan Berger
<address@hidden> wrote:
>
> Implement a function to translate TPM error codes to strings so that
> at least the most common error codes can be translated to human
> readable strings.
>
> Signed-off-by: Stefan Berger <address@hidden>
> ---
>  hw/tpm/tpm_emulator.c | 50 ++++++++++++++++++++++++++++++++++---------
>  1 file changed, 40 insertions(+), 10 deletions(-)
>
> diff --git a/hw/tpm/tpm_emulator.c b/hw/tpm/tpm_emulator.c
> index 1288cbcb8d..186dde0838 100644
> --- a/hw/tpm/tpm_emulator.c
> +++ b/hw/tpm/tpm_emulator.c
> @@ -82,6 +82,30 @@ typedef struct TPMEmulator {
>      TPMBlobBuffers state_blobs;
>  } TPMEmulator;
>
> +struct tpm_error {
> +    uint32_t tpm_result;
> +    const char *string;
> +};
> +
> +static const struct tpm_error tpm_errors[] = {
> +    {  9 , "operation failed" },
> +    {  32, "encryption error" },
> +    {  33, "decryption error" },
> +    /* TPM 2 codes */
> +    { 0x101, "operation failed" },
> +};

Wouldn't those codes be better defined in tpm_ioctl.h?

> +
> +static const char *tpm_emulator_strerror(uint32_t tpm_result)
> +{
> +    size_t i;
> +
> +    for (i = 0; i < ARRAY_SIZE(tpm_errors); i++) {
> +        if (tpm_errors[i].tpm_result == tpm_result) {
> +            return tpm_errors[i].string;
> +        }
> +    }
> +    return "";
> +}
>
>  static int tpm_emulator_ctrlcmd(TPMEmulator *tpm, unsigned long cmd, void 
> *msg,
>                                  size_t msg_len_in, size_t msg_len_out)
> @@ -264,7 +288,8 @@ static int tpm_emulator_stop_tpm(TPMBackend *tb)
>
>      res = be32_to_cpu(res);
>      if (res) {
> -        error_report("tpm-emulator: TPM result for CMD_STOP: 0x%x", res);
> +        error_report("tpm-emulator: TPM result for CMD_STOP: 0x%x %s", res,
> +                     tpm_emulator_strerror(res));
>          return -1;
>      }
>
> @@ -293,8 +318,9 @@ static int tpm_emulator_set_buffer_size(TPMBackend *tb,
>
>      psbs.u.resp.tpm_result = be32_to_cpu(psbs.u.resp.tpm_result);
>      if (psbs.u.resp.tpm_result != 0) {
> -        error_report("tpm-emulator: TPM result for set buffer size : 0x%x",
> -                     psbs.u.resp.tpm_result);
> +        error_report("tpm-emulator: TPM result for set buffer size : 0x%x 
> %s",
> +                     psbs.u.resp.tpm_result,
> +                     tpm_emulator_strerror(psbs.u.resp.tpm_result));
>          return -1;
>      }
>
> @@ -339,7 +365,8 @@ static int tpm_emulator_startup_tpm_resume(TPMBackend 
> *tb, size_t buffersize,
>
>      res = be32_to_cpu(init.u.resp.tpm_result);
>      if (res) {
> -        error_report("tpm-emulator: TPM result for CMD_INIT: 0x%x", res);
> +        error_report("tpm-emulator: TPM result for CMD_INIT: 0x%x %s", res,
> +                     tpm_emulator_strerror(res));
>          goto err_exit;
>      }
>      return 0;
> @@ -399,8 +426,9 @@ static int 
> tpm_emulator_reset_tpm_established_flag(TPMBackend *tb,
>
>      res = be32_to_cpu(reset_est.u.resp.tpm_result);
>      if (res) {
> -        error_report("tpm-emulator: TPM result for rest establixhed flag: 
> 0x%x",
> -                     res);
> +        error_report(
> +            "tpm-emulator: TPM result for rest establixhed flag: 0x%x %s",
> +            res, tpm_emulator_strerror(res));
>          return -1;
>      }
>
> @@ -638,7 +666,8 @@ static int tpm_emulator_get_state_blob(TPMEmulator 
> *tpm_emu,
>      res = be32_to_cpu(pgs.u.resp.tpm_result);
>      if (res != 0 && (res & 0x800) == 0) {
>          error_report("tpm-emulator: Getting the stateblob (type %d) failed "
> -                     "with a TPM error 0x%x", type, res);
> +                     "with a TPM error 0x%x %s", type, res,
> +                     tpm_emulator_strerror(res));
>          return -1;
>      }
>
> @@ -758,7 +787,8 @@ static int tpm_emulator_set_state_blob(TPMEmulator 
> *tpm_emu,
>      tpm_result = be32_to_cpu(pss.u.resp.tpm_result);
>      if (tpm_result != 0) {
>          error_report("tpm-emulator: Setting the stateblob (type %d) failed "
> -                     "with a TPM error 0x%x", type, tpm_result);
> +                     "with a TPM error 0x%x %s", type, tpm_result,
> +                     tpm_emulator_strerror(tpm_result));
>          return -1;
>      }
>
> @@ -888,8 +918,8 @@ static void tpm_emulator_shutdown(TPMEmulator *tpm_emu)
>          error_report("tpm-emulator: Could not cleanly shutdown the TPM: %s",
>                       strerror(errno));
>      } else if (res != 0) {
> -        error_report("tpm-emulator: TPM result for sutdown: 0x%x",
> -                     be32_to_cpu(res));
> +        error_report("tpm-emulator: TPM result for shutdown: 0x%x %s",
> +                     be32_to_cpu(res), 
> tpm_emulator_strerror(be32_to_cpu(res)));
>      }
>  }

lgtm

>
> --
> 2.20.1
>


-- 
Marc-André Lureau



reply via email to

[Prev in Thread] Current Thread [Next in Thread]