grub-devel
[Top][All Lists]
Advanced

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

[PATCH v2 3/5] ieee1275/tcg2: Refactor grub_ieee1275_tpm_init


From: Stefan Berger
Subject: [PATCH v2 3/5] ieee1275/tcg2: Refactor grub_ieee1275_tpm_init
Date: Mon, 25 Nov 2024 17:41:40 -0500

Move tpm_get_tpm_version into grub_ieee1275_tpm_init and invalidate
grub_ieee1275_tpm_ihandle in case no TPM 2 could be detected. Try the
initialization only once. Use the grub_ieee1275_tpm_ihandle as
indicator for an available TPM instead of grub_ieee1275_tpm_version,
which can now be removed.

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
---
 grub-core/commands/ieee1275/ibmvtpm.c |  2 +-
 grub-core/lib/ieee1275/tcg2.c         | 43 +++++++++++----------------
 include/grub/ieee1275/tpm.h           |  1 -
 3 files changed, 18 insertions(+), 28 deletions(-)

diff --git a/grub-core/commands/ieee1275/ibmvtpm.c 
b/grub-core/commands/ieee1275/ibmvtpm.c
index 284673217..16552b136 100644
--- a/grub-core/commands/ieee1275/ibmvtpm.c
+++ b/grub-core/commands/ieee1275/ibmvtpm.c
@@ -100,7 +100,7 @@ grub_tpm_measure (unsigned char *buf, grub_size_t size, 
grub_uint8_t pcr,
   grub_dprintf ("tpm", "log_event, pcr = %d, size = 0x%" PRIxGRUB_SIZE ", 
%s\n",
                pcr, size, description);
 
-  if (grub_ieee1275_tpm_version == 2)
+  if (grub_ieee1275_tpm_ihandle != IEEE1275_IHANDLE_INVALID)
     return tpm2_log_event (buf, size, pcr, description);
 
   return GRUB_ERR_NONE;
diff --git a/grub-core/lib/ieee1275/tcg2.c b/grub-core/lib/ieee1275/tcg2.c
index 8c4306ae8..8f29b3c1e 100644
--- a/grub-core/lib/ieee1275/tcg2.c
+++ b/grub-core/lib/ieee1275/tcg2.c
@@ -23,39 +23,30 @@
 #include <grub/mm.h>
 #include <grub/misc.h>
 
-grub_ieee1275_ihandle_t grub_ieee1275_tpm_ihandle;
-grub_uint8_t grub_ieee1275_tpm_version;
-
-static void
-tpm_get_tpm_version (void)
-{
-  grub_ieee1275_phandle_t vtpm;
-  char buffer[20];
-
-  if (!grub_ieee1275_finddevice ("/vdevice/vtpm", &vtpm) &&
-      !grub_ieee1275_get_property (vtpm, "compatible", buffer,
-                                  sizeof (buffer), NULL) &&
-      !grub_strcmp (buffer, "IBM,vtpm20"))
-    grub_ieee1275_tpm_version = 2;
-}
+grub_ieee1275_ihandle_t grub_ieee1275_tpm_ihandle = IEEE1275_IHANDLE_INVALID;
 
 grub_err_t
 grub_ieee1275_tpm_init (void)
 {
-  static int init_success = 0;
+  grub_ieee1275_phandle_t vtpm;
+  static int init_tried = 0;
+  char buffer[20];
 
-  if (!init_success)
+  if (!init_tried)
     {
-      if (grub_ieee1275_open ("/vdevice/vtpm", &grub_ieee1275_tpm_ihandle) < 0)
-       {
-         grub_ieee1275_tpm_ihandle = IEEE1275_IHANDLE_INVALID;
-         return GRUB_ERR_UNKNOWN_DEVICE;
-       }
-
-      init_success = 1;
-
-      tpm_get_tpm_version ();
+      init_tried = 1;
+
+      if (grub_ieee1275_open ("/vdevice/vtpm",
+                             &grub_ieee1275_tpm_ihandle) < 0 ||
+         grub_ieee1275_finddevice ("/vdevice/vtpm", &vtpm) ||
+         grub_ieee1275_get_property (vtpm, "compatible", buffer,
+                                     sizeof (buffer), NULL) ||
+         grub_strcmp (buffer, "IBM,vtpm20"))
+       grub_ieee1275_tpm_ihandle = IEEE1275_IHANDLE_INVALID;
     }
 
+  if (grub_ieee1275_tpm_ihandle == IEEE1275_IHANDLE_INVALID)
+    return GRUB_ERR_UNKNOWN_DEVICE;
+
   return GRUB_ERR_NONE;
 }
diff --git a/include/grub/ieee1275/tpm.h b/include/grub/ieee1275/tpm.h
index ff606eb34..f173c94b3 100644
--- a/include/grub/ieee1275/tpm.h
+++ b/include/grub/ieee1275/tpm.h
@@ -26,7 +26,6 @@
 #define IEEE1275_IHANDLE_INVALID ((grub_ieee1275_ihandle_t) 0)
 
 extern grub_ieee1275_ihandle_t grub_ieee1275_tpm_ihandle;
-extern grub_uint8_t grub_ieee1275_tpm_version;
 
 extern grub_err_t grub_ieee1275_tpm_init (void);
 
-- 
2.25.1




reply via email to

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