summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/geom/eli/g_eli.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/geom/eli/g_eli.c b/sys/geom/eli/g_eli.c
index 01c3b53..9615621 100644
--- a/sys/geom/eli/g_eli.c
+++ b/sys/geom/eli/g_eli.c
@@ -99,6 +99,25 @@ SYSCTL_UINT(_kern_geom_eli, OID_AUTO, boot_passcache, CTLFLAG_RD,
&g_eli_boot_passcache, 0,
"Passphrases are cached during boot process for possible reuse");
static void
+fetch_loader_passphrase(void * dummy)
+{
+ char * env_passphrase;
+
+ KASSERT(dynamic_kenv, ("need dynamic kenv"));
+
+ if ((env_passphrase = getenv("kern.geom.eli.passphrase")) != NULL) {
+ /* Extract passphrase from the environment. */
+ strlcpy(cached_passphrase, env_passphrase,
+ sizeof(cached_passphrase));
+ freeenv(env_passphrase);
+
+ /* Wipe the passphrase from the environment. */
+ unsetenv("kern.geom.eli.passphrase");
+ }
+}
+SYSINIT(geli_fetch_loader_passphrase, SI_SUB_KMEM + 1, SI_ORDER_ANY,
+ fetch_loader_passphrase, NULL);
+static void
zero_boot_passcache(void * dummy)
{
OpenPOWER on IntegriCloud