]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
tpm2-util: Check for dlopen() when calculating tpm2 support
authorDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 10 Jul 2023 10:20:33 +0000 (12:20 +0200)
committerDaan De Meyer <daan.j.demeyer@gmail.com>
Mon, 10 Jul 2023 12:26:51 +0000 (14:26 +0200)
src/creds/creds.c
src/shared/tpm2-util.c
src/shared/tpm2-util.h

index 51efe2761686512403a8d5d9206bee54d6888f52..679b0750de223264db88c5481c0eaf4d0f5304da 100644 (file)
@@ -636,11 +636,13 @@ static int verb_has_tpm2(int argc, char **argv, void *userdata) {
                 printf("%sfirmware\n"
                        "%sdriver\n"
                        "%ssystem\n"
-                       "%ssubsystem\n",
+                       "%ssubsystem\n"
+                       "%slibraries\n",
                        plus_minus(s & TPM2_SUPPORT_FIRMWARE),
                        plus_minus(s & TPM2_SUPPORT_DRIVER),
                        plus_minus(s & TPM2_SUPPORT_SYSTEM),
-                       plus_minus(s & TPM2_SUPPORT_SUBSYSTEM));
+                       plus_minus(s & TPM2_SUPPORT_SUBSYSTEM),
+                       plus_minus(s & TPM2_SUPPORT_LIBRARIES));
         }
 
         /* Return inverted bit flags. So that TPM2_SUPPORT_FULL becomes EXIT_SUCCESS and the other values
index c991109f722b28144f9bdee883f746e09e655a93..9166b6593ffb0527e8cea640dd55bd7fa72fcce8 100644 (file)
@@ -4195,6 +4195,10 @@ Tpm2Support tpm2_support(void) {
 
 #if HAVE_TPM2
         support |= TPM2_SUPPORT_SYSTEM;
+
+        r = dlopen_tpm2();
+        if (r >= 0)
+                support |= TPM2_SUPPORT_LIBRARIES;
 #endif
 
         return support;
index c34239854bf6d6cba67c2470c8402ce2efa68a69..ad867b9d1d3cf24a8d7ae8c4f4880a2be19c8a8a 100644 (file)
@@ -183,7 +183,8 @@ typedef enum Tpm2Support {
         TPM2_SUPPORT_DRIVER    = 1 << 1,  /* the kernel has a driver loaded for it */
         TPM2_SUPPORT_SYSTEM    = 1 << 2,  /* we support it ourselves */
         TPM2_SUPPORT_SUBSYSTEM = 1 << 3,  /* the kernel has the tpm subsystem enabled */
-        TPM2_SUPPORT_FULL      = TPM2_SUPPORT_FIRMWARE|TPM2_SUPPORT_DRIVER|TPM2_SUPPORT_SYSTEM|TPM2_SUPPORT_SUBSYSTEM,
+        TPM2_SUPPORT_LIBRARIES = 1 << 4,  /* we can dlopen the tpm2 libraries */
+        TPM2_SUPPORT_FULL      = TPM2_SUPPORT_FIRMWARE|TPM2_SUPPORT_DRIVER|TPM2_SUPPORT_SYSTEM|TPM2_SUPPORT_SUBSYSTEM|TPM2_SUPPORT_LIBRARIES,
 } Tpm2Support;
 
 enum {