]> git.ipfire.org Git - thirdparty/grub.git/commitdiff
ieee1275/tcg2: Refactor grub_ieee1275_tpm_init()
authorStefan Berger <stefanb@linux.ibm.com>
Tue, 26 Nov 2024 20:39:44 +0000 (15:39 -0500)
committerDaniel Kiper <daniel.kiper@oracle.com>
Thu, 28 Nov 2024 21:37:50 +0000 (22:37 +0100)
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 so that grub_tpm_present() will always return
the same result. 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>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
grub-core/commands/ieee1275/ibmvtpm.c
grub-core/lib/ieee1275/tcg2.c
include/grub/ieee1275/tpm.h

index 2846732175db240d95e8d474602bc65789a6888f..4958b04a920281f070c0c2eee53cf9e7ba91f793 100644 (file)
@@ -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 != GRUB_IEEE1275_IHANDLE_INVALID)
     return tpm2_log_event (buf, size, pcr, description);
 
   return GRUB_ERR_NONE;
index 1819d144792ccd8c3a57e8972fe46d0d4366aa70..ea01a30eb46e7622f733c072ed814b6bb939a5e3 100644 (file)
 #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 = GRUB_IEEE1275_IHANDLE_INVALID;
 
 grub_err_t
 grub_ieee1275_tpm_init (void)
 {
-  static int init_success = 0;
+  static bool init_tried = false;
+  grub_ieee1275_phandle_t vtpm;
+  char buffer[20];
 
-  if (!init_success)
+  if (init_tried == false)
     {
-      if (grub_ieee1275_open ("/vdevice/vtpm", &grub_ieee1275_tpm_ihandle) < 0)
+      init_tried = true;
+
+      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"))
        {
+         if (grub_ieee1275_tpm_ihandle != GRUB_IEEE1275_IHANDLE_INVALID)
+           grub_ieee1275_close (grub_ieee1275_tpm_ihandle);
+
          grub_ieee1275_tpm_ihandle = GRUB_IEEE1275_IHANDLE_INVALID;
-         return GRUB_ERR_UNKNOWN_DEVICE;
        }
-
-      init_success = 1;
-
-      tpm_get_tpm_version ();
     }
 
+  if (grub_ieee1275_tpm_ihandle == GRUB_IEEE1275_IHANDLE_INVALID)
+    return GRUB_ERR_UNKNOWN_DEVICE;
+
   return GRUB_ERR_NONE;
 }
index 9575c1c68d42f88461e44a527575c9b72cf4106f..fe5cb47139d55c12aa319173d9ed89233811a21c 100644 (file)
@@ -24,7 +24,6 @@
 #include <grub/ieee1275/ieee1275.h>
 
 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);