grub-devel.gnu.org archive mirror
 help / color / mirror / Atom feed
From: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
To: grub-devel@gnu.org
Cc: dja@axtens.net, jan.setjeeilers@oracle.com,
	julian.klode@canonical.com, mate.kukri@canonical.com,
	pjones@redhat.com, msuchanek@suse.com, mlewando@redhat.com,
	stefanb@linux.ibm.com, avnish@linux.ibm.com, nayna@linux.ibm.com,
	ssrish@linux.ibm.com, Sudhakar Kuppusamy <sudhakar@linux.ibm.com>,
	sridharm@linux.ibm.com
Subject: [PATCH v10 12/22] appended signatures: Introducing key management environment variable
Date: Tue,  9 Sep 2025 17:15:20 +0530	[thread overview]
Message-ID: <20250909114530.36863-13-sudhakar@linux.ibm.com> (raw)
In-Reply-To: <20250909114530.36863-1-sudhakar@linux.ibm.com>

Introducing the appended signature key management environment variable.
It is automatically set to either "static" or "dynamic" based on the
Platform KeyStore.

"static": Enforce static key management signature verification.
          This is the default. When the GRUB is locked down,
          user cannot change the value by setting the appendedsig_key_mgmt
          variable back to "dynamic".

"dynamic": Enforce dynamic key management signature verification.
           When the GRUB is locked down, user cannot change the value
           by setting the appendedsig_key_mgmt variable back to "static".

Signed-off-by: Sudhakar Kuppusamy <sudhakar@linux.ibm.com>
---
 grub-core/commands/appendedsig/appendedsig.c | 75 ++++++++++++++++++++
 1 file changed, 75 insertions(+)

diff --git a/grub-core/commands/appendedsig/appendedsig.c b/grub-core/commands/appendedsig/appendedsig.c
index cffacb77f..e8ccf05fc 100644
--- a/grub-core/commands/appendedsig/appendedsig.c
+++ b/grub-core/commands/appendedsig/appendedsig.c
@@ -33,6 +33,7 @@
 #include <libtasn1.h>
 #include <grub/env.h>
 #include <grub/lockdown.h>
+#include <grub/powerpc/ieee1275/platform_keystore.h>
 
 #include "appendedsig.h"
 
@@ -94,6 +95,16 @@ static sb_database_t db = {.certs = NULL, .cert_entries = 0};
  */
 static bool check_sigs = false;
 
+/*
+ * append_key_mgmt: Key Management Modes
+ * False: Static key management (use built-in Keys). This is default.
+ * True: Dynamic key management (use Platform KeySotre).
+ */
+static bool append_key_mgmt = false;
+
+/* Platform KeyStore db and dbx. */
+static grub_pks_t *pks_keystore;
+
 static grub_ssize_t
 pseudo_read (struct grub_file *file, char *buf, grub_size_t len)
 {
@@ -475,6 +486,46 @@ grub_env_write_sec (struct grub_env_var *var __attribute__ ((unused)), const cha
   return ret;
 }
 
+static const char *
+grub_env_read_key_mgmt (struct grub_env_var *var __attribute__ ((unused)),
+                        const char *val __attribute__ ((unused)))
+{
+  if (append_key_mgmt == true)
+    return "dynamic";
+
+  return "static";
+}
+
+static char *
+grub_env_write_key_mgmt (struct grub_env_var *var __attribute__ ((unused)), const char *val)
+{
+  char *ret;
+
+  /*
+   * Do not allow the value to be changed if signature verification is
+   * (check_sigs is set to enforce) enabled and GRUB is locked down.
+   */
+  if (check_sigs == true && grub_is_lockdown () == GRUB_LOCKDOWN_ENABLED)
+    {
+      ret = grub_strdup (grub_env_read_key_mgmt (NULL, NULL));
+      if (ret == NULL)
+        grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory");
+
+      return ret;
+    }
+
+  if ((*val == '1') || (*val == 'd'))
+    append_key_mgmt = true;
+  else if ((*val == '0') || (*val == 's'))
+    append_key_mgmt = false;
+
+  ret = grub_strdup (grub_env_read_key_mgmt (NULL, NULL));
+  if (ret == NULL)
+    grub_error (GRUB_ERR_OUT_OF_MEMORY, "out of memory");
+
+  return ret;
+}
+
 static grub_err_t
 appendedsig_init (grub_file_t io __attribute__ ((unused)), enum grub_file_type type,
                   void **context __attribute__ ((unused)), enum grub_verify_flags *flags)
@@ -546,6 +597,11 @@ GRUB_MOD_INIT (appendedsig)
   if (grub_is_lockdown () == GRUB_LOCKDOWN_ENABLED)
     check_sigs = true;
 
+  /* If PKS keystore is available, use dynamic key management. */
+  pks_keystore = grub_pks_get_keystore ();
+  if (pks_keystore != NULL)
+    append_key_mgmt = true;
+
   /*
    * This is appended signature verification environment variable.
    * It is automatically set to either "no" or "enforce" based on the
@@ -560,6 +616,23 @@ GRUB_MOD_INIT (appendedsig)
   grub_register_variable_hook ("check_appended_signatures", grub_env_read_sec, grub_env_write_sec);
   grub_env_export ("check_appended_signatures");
 
+  /*
+   * This is appended signature key management environment variable.
+   * It is automatically set to either "static" or "dynamic" based on the
+   * Platform KeyStore.
+   *
+   * "static": Enforce static key management signature verification.
+   *           This is the default. When the GRUB is locked down,
+   *           user cannot change the value by setting the
+   *           appendedsig_key_mgmt variable back to "dynamic".
+   *
+   * "dynamic": Enforce dynamic key management signature verification.
+   *            When the GRUB is locked down, user cannot change the value
+   *            by setting the appendedsig_key_mgmt variable back to "static".
+   */
+  grub_register_variable_hook ("appendedsig_key_mgmt", grub_env_read_key_mgmt, grub_env_write_key_mgmt);
+  grub_env_export ("appendedsig_key_mgmt");
+
   rc = grub_asn1_init ();
   if (rc != ASN1_SUCCESS)
     grub_fatal ("error initing ASN.1 data structures: %d: %s\n", rc, asn1_strerror (rc));
@@ -583,5 +656,7 @@ GRUB_MOD_FINI (appendedsig)
   free_db_list ();
   grub_register_variable_hook ("check_appended_signatures", NULL, NULL);
   grub_env_unset ("check_appended_signatures");
+  grub_register_variable_hook ("appendedsig_key_mgmt", NULL, NULL);
+  grub_env_unset ("appendedsig_key_mgmt");
   grub_verifier_unregister (&grub_appendedsig_verifier);
 }
-- 
2.39.5 (Apple Git-154)


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

  parent reply	other threads:[~2025-09-09 11:49 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-09 11:45 [PATCH v10 00/22] Appended Signature Secure Boot Support for PowerPC Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 01/22] powerpc-ieee1275: Add support for signing GRUB with an appended signature Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 02/22] crypto: Move storage for grub_crypto_pk_* to crypto.c Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 03/22] pgp: Rename OBJ_TYPE_PUBKEY to OBJ_TYPE_GPG_PUBKEY Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 04/22] grub-install: Support embedding x509 certificates Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 05/22] appended signatures: Import GNUTLS's ASN.1 description files Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 06/22] appended signatures: Parse ASN1 node Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 07/22] appended signatures: Parse PKCS#7 signed data Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 08/22] appended signatures: Parse X.509 certificates Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 09/22] powerpc_ieee1275: Enter lockdown based on /ibm, secure-boot Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 10/22] appended signatures: Support verifying appended signatures Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 11/22] powerpc_ieee1275: Read the db and dbx secure boot variables Sudhakar Kuppusamy
2025-09-11  7:54   ` Srish Srinivasan
2025-09-15 10:43     ` Sudhakar Kuppusamy
2025-09-09 11:45 ` Sudhakar Kuppusamy [this message]
2025-09-09 11:45 ` [PATCH v10 13/22] appended signatures: Create db and dbx lists Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 14/22] appended signatures: Using db and dbx lists for signature verification Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 15/22] appended signatures: GRUB commands to manage the certificates Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 16/22] powerpc_ieee1275: Introduce use_static_keys flag Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 17/22] appended signatures: Read default db keys from the ELF Note Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 18/22] appended signatures: GRUB commands to manage the hashes Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 19/22] appended signatures: Verification tests Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 20/22] docs/grub: Document signing GRUB under UEFI Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 21/22] docs/grub: Document signing GRUB with an appended signature Sudhakar Kuppusamy
2025-09-09 11:45 ` [PATCH v10 22/22] docs/grub: Document " Sudhakar Kuppusamy

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250909114530.36863-13-sudhakar@linux.ibm.com \
    --to=sudhakar@linux.ibm.com \
    --cc=avnish@linux.ibm.com \
    --cc=dja@axtens.net \
    --cc=grub-devel@gnu.org \
    --cc=jan.setjeeilers@oracle.com \
    --cc=julian.klode@canonical.com \
    --cc=mate.kukri@canonical.com \
    --cc=mlewando@redhat.com \
    --cc=msuchanek@suse.com \
    --cc=nayna@linux.ibm.com \
    --cc=pjones@redhat.com \
    --cc=sridharm@linux.ibm.com \
    --cc=ssrish@linux.ibm.com \
    --cc=stefanb@linux.ibm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).