On 9/6/24 5:11 AM, Gary Lin via Grub-devel wrote:
From: Hernan Gatta <hega...@linux.microsoft.com>

The TPM2 key protector is a module that enables the automatic retrieval
of a fully-encrypted disk's unlocking key from a TPM 2.0.

The theory of operation is such that the module accepts various
arguments, most of which are optional and therefore possess reasonable
defaults. One of these arguments is the keyfile/tpm2key parameter, which
is mandatory. There are two supported key formats:


+}
+
+grub_err_t
+grub_tpm2_protector_parse_tpm_handle (const char *value, TPM_HANDLE_t *handle)
+{
+  grub_uint64_t num;
+  const char *str_end;
+
+  grub_errno = GRUB_ERR_NONE;
+  num = grub_strtoul (value, &str_end, 0);
+  if (*value == '\0' || *str_end != '\0')
+    return grub_error (GRUB_ERR_BAD_NUMBER, "TPM handle value '%s' is not a 
number", value);
+
+  if (num > GRUB_UINT_MAX)
+    return grub_error (GRUB_ERR_OUT_OF_RANGE, "Value %lu is too large to be a TPM 
handle, TPM handles are unsigned 32-bit integers", num);

commands/tpm2_key_protector/args.c: In function ‘grub_tpm2_protector_parse_tpm_handle’: commands/tpm2_key_protector/args.c:124:56: error: format ‘%lu’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘grub_uint64_t’ {aka ‘long long unsigned int’} [-Werror=format=] 124 | return grub_error (GRUB_ERR_OUT_OF_RANGE, "Value %lu is too large to be a TPM handle, TPM handles are unsigned 32-bit integers", num); | ~~^ ~~~ | | | | long unsigned int grub_uint64_t {aka long long unsigned int}
      |                                                      %llu
cc1: all warnings being treated as errors


Changing this to %llu leads to:

grub-core/commands/tpm2_key_protector/args.c: In function ‘grub_tpm2_protector_parse_tpm_handle’: grub-core/commands/tpm2_key_protector/args.c:124:57: error: format ‘%llu’ expects argument of type ‘long long unsigned int’, but argument 3 has type ‘grub_uint64_t’ {aka ‘long unsigned int’} [-Werror=format=] 124 | return grub_error (GRUB_ERR_OUT_OF_RANGE, "Value %llu is too large to be a TPM handle, TPM handles are unsigned 32-bit integers", num); | ~~~^ ~~~ | | | | long long unsigned int grub_uint64_t {aka long unsigned int}
      |                                                      %lu
cc1: all warnings being treated as errors


Can't win . This works:

diff --git a/grub-core/commands/tpm2_key_protector/args.c b/grub-core/commands/tpm2_key_protector/args.c
index c58cbe307..749db81a5 100644
--- a/grub-core/commands/tpm2_key_protector/args.c
+++ b/grub-core/commands/tpm2_key_protector/args.c
@@ -121,7 +121,7 @@ grub_tpm2_protector_parse_tpm_handle (const char *value, TPM_HANDLE_t *handle) return grub_error (GRUB_ERR_BAD_NUMBER, "TPM handle value '%s' is not a number", value);

   if (num > GRUB_UINT_MAX)
- return grub_error (GRUB_ERR_OUT_OF_RANGE, "Value %lu is too large to be a TPM handle, TPM handles are unsigned 32-bit integers", num); + return grub_error (GRUB_ERR_OUT_OF_RANGE, "Value %lu is too large to be a TPM handle, TPM handles are unsigned 32-bit integers", (unsigned long)num);

   *handle = (TPM_HANDLE_t) num;


_______________________________________________
Grub-devel mailing list
Grub-devel@gnu.org
https://lists.gnu.org/mailman/listinfo/grub-devel

Reply via email to