On Fri, Aug 30, 2024 at 06:03:16PM +0200, Daniel Kiper wrote: > On Fri, Jun 28, 2024 at 04:19:03PM +0800, Gary Lin via Grub-devel wrote: > > From: Patrick Colp <patrick.c...@oracle.com> > > > > Currently with the TPM2 protector, only SRK mode is supported and > > NV index support is just a stub. Implement the NV index option. > > > > Note: This only extends support on the unseal path. grub2_protect > > has not been updated. tpm2-tools can be used to insert a key into > > the NV index. > > > > An example of inserting a key using tpm2-tools: > > > > # Get random key. > > tpm2_getrandom 32 > key.dat > > > > # Create primary object. > > tpm2_createprimary -C o -g sha256 -G ecc -c primary.ctx > > > > # Create policy object. `pcrs.dat` contains the PCR values to seal > > against. > > tpm2_startauthsession -S session.dat > > tpm2_policypcr -S session.dat -l sha256:7,11 -f pcrs.dat -L policy.dat > > tpm2_flushcontext session.dat > > > > # Seal key into TPM. > > cat key.dat | tpm2_create -C primary.ctx -u key.pub -r key.priv -L > > policy.dat -i- > > tpm2_load -C primary.ctx -u key.pub -r key.priv -n sealing.name -c > > sealing.ctx > > tpm2_evictcontrol -C o -c sealing.ctx 0x81000000 > > > > Then to unseal the key in grub, add this to grub.cfg: > > > > tpm2_key_protector_init --mode=nv --nvindex=0x81000000 --pcrs=7,11 > > cryptomount -u <UUID> --protector tpm2 > > Please add this to the GRUB documentation. > Sure.
> > Signed-off-by: Patrick Colp <patrick.c...@oracle.com> > > Signed-off-by: Gary Lin <g...@suse.com> > > Reviewed-by: Stefan Berger <stef...@linux.ibm.com> > > --- > > .../commands/tpm2_key_protector/module.c | 27 ++++++++++++++++--- > > 1 file changed, 23 insertions(+), 4 deletions(-) > > > > diff --git a/grub-core/commands/tpm2_key_protector/module.c > > b/grub-core/commands/tpm2_key_protector/module.c > > index a98109c43..ae412e6f4 100644 > > --- a/grub-core/commands/tpm2_key_protector/module.c > > +++ b/grub-core/commands/tpm2_key_protector/module.c > > @@ -981,11 +981,30 @@ grub_tpm2_protector_srk_recover (const struct > > grub_tpm2_protector_context *ctx, > > } > > > > static grub_err_t > > -grub_tpm2_protector_nv_recover (const struct grub_tpm2_protector_context > > *ctx __attribute__ ((unused)), > > - grub_uint8_t **key __attribute__ ((unused)), > > - grub_size_t *key_size __attribute__ ((unused))) > > +grub_tpm2_protector_nv_recover (const struct grub_tpm2_protector_context > > *ctx, > > + grub_uint8_t **key, grub_size_t *key_size) > > { > > - return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, N_("NV Index mode is > > not implemented yet")); > > + TPM_HANDLE sealed_handle = ctx->nv; > > + tpm2key_policy_t policy_seq = NULL; > > + grub_err_t err; > > + > > + /* Create a basic policy sequence based on the given PCR selection */ > > + err = grub_tpm2_protector_simple_policy_seq (ctx, &policy_seq); > > + if (err != GRUB_ERR_NONE) > > + goto exit; > > + > > + err = grub_tpm2_protector_unseal (policy_seq, sealed_handle, key, > > key_size); > > + > > + /* Pop error messages on success */ > > + if (err == GRUB_ERR_NONE) > > + while (grub_error_pop ()); > > Hmmm... Why does unseal success clear whole error stack? > If it is correct it begs for comment here. > It's mirrored from srk mode which may goes through several policy sequences. For nvindex, it only tries one policy sequence, so, yes, it's redundant to pop grub errors. Gary Lin _______________________________________________ Grub-devel mailing list Grub-devel@gnu.org https://lists.gnu.org/mailman/listinfo/grub-devel