There are two bugs when using the TPM PCR banks other than the default
SHA256 PCR bank:

1) Key unsealing failure
2) Dumping the wrong PCR bank

This patch set fixes the above two bugs and adds the tests for SHA384
PCR bank.

v2:
  - Set the SHA256 PCR bank explicitly in tpm2_key_protector_test

Gary Lin (3):
  grub-protect: Fix the hash algorithm of PCR digest
  tpm2_key_protector: Dump the PCR bank for key unsealing
  tests/tpm2_key_protector_test: Add tests for SHA384 PCR bank

 .../commands/tpm2_key_protector/module.c      | 11 ++++-
 tests/tpm2_key_protector_test.in              | 46 +++++++++++++------
 util/grub-protect.c                           |  2 +-
 3 files changed, 43 insertions(+), 16 deletions(-)

Range-diff against v1:
1:  815b486ca ! 1:  fc7f713fb grub-protect: Fix the hash algorithm of PCR digest
    @@ Commit message
         Ref: https://github.com/lcp/grub2/issues/4
     
         Signed-off-by: Gary Lin <g...@suse.com>
    +    Reviewed-by: Stefan Berger <stef...@linux.ibm.com>
    +    Reviewed-by: Sudhakar Kuppusamy <sudha...@linux.ibm.com>
     
      ## util/grub-protect.c ##
     @@ util/grub-protect.c: protect_tpm2_get_policy_digest (protect_args_t 
*args, TPM2B_DIGEST_t *digest)
2:  6e26ea23e ! 2:  7d3769fe2 tpm2_key_protector: Dump the PCR bank for key 
unsealing
    @@ Commit message
         necessary.
     
         Signed-off-by: Gary Lin <g...@suse.com>
    +    Reviewed-by: Stefan Berger <stef...@linux.ibm.com>
    +    Reviewed-by: Sudhakar Kuppusamy <sudha...@linux.ibm.com>
     
      ## grub-core/commands/tpm2_key_protector/module.c ##
     @@ grub-core/commands/tpm2_key_protector/module.c: static 
tpm2_protector_context_t tpm2_protector_ctx = {0};
3:  8bf3b04b1 ! 3:  cccf03d72 tests/tpm2_key_protector_test: Add tests for 
SHA384 PCR bank
    @@ Commit message
         bank instead of the default SHA256 PCR bank.
     
         Signed-off-by: Gary Lin <g...@suse.com>
    +    Reviewed-by: Sudhakar Kuppusamy <sudha...@linux.ibm.com>
     
      ## tests/tpm2_key_protector_test.in ##
     @@ tests/tpm2_key_protector_test.in: done
    @@ tests/tpm2_key_protector_test.in: done
          grub_srk_alg=${srk_alg}
      
     @@ tests/tpm2_key_protector_test.in: tpm2_seal_unseal() {
    -   extra_opt="${extra_opt} --tpm2-asymmetric=${srk_alg}"
    -     fi
    - 
    -+    if [ "${pcr_bank}" = "" ]; then
    -+        pcr_bank="sha256"
    -+    fi
    -+
    -     # Seal the password with grub-protect
    -     grub-protect ${extra_opt} \
    -   --tpm2-device="${tpm2dev}" \
        --action=add \
        --protector=tpm2 \
        --tpm2key \
    @@ tests/tpm2_key_protector_test.in: EOF
          extra_opt=""
          extra_grub_opt=""
     @@ tests/tpm2_key_protector_test.in: tpm2_seal_unseal_nv() {
    -   nv_index="0x81000000"
    -     fi
    - 
    -+    if [ "${pcr_bank}" = "" ]; then
    -+        pcr_bank="sha256"
    -+    fi
    -+
          if [ "$key_type" = "tpm2key" ]; then
        extra_opt="--tpm2key"
          else
    @@ tests/tpm2_key_protector_test.in: tpm2_seal_unseal_nv() {
        --tpm2-pcrs=0,1 \
        --tpm2-keyfile="${lukskeyfile}" \
        --tpm2-nvindex="${nv_index}" || ret=$?
    -@@ tests/tpm2_key_protector_test.in: srktests+=("RSA persistent 
no_fallback_srk")
    - srktests+=("ECC persistent no_fallback_srk")
    - srktests+=("RSA transient fallback_srk")
    - srktests+=("ECC transient fallback_srk")
    +@@ tests/tpm2_key_protector_test.in: EOF
    + 
    + # Testcases for SRK mode
    + declare -a srktests=()
    +-srktests+=("default transient no_fallback_srk")
    +-srktests+=("RSA transient no_fallback_srk")
    +-srktests+=("ECC transient no_fallback_srk")
    +-srktests+=("RSA persistent no_fallback_srk")
    +-srktests+=("ECC persistent no_fallback_srk")
    +-srktests+=("RSA transient fallback_srk")
    +-srktests+=("ECC transient fallback_srk")
    ++srktests+=("default transient no_fallback_srk sha256")
    ++srktests+=("RSA transient no_fallback_srk sha256")
    ++srktests+=("ECC transient no_fallback_srk sha256")
    ++srktests+=("RSA persistent no_fallback_srk sha256")
    ++srktests+=("ECC persistent no_fallback_srk sha256")
    ++srktests+=("RSA transient fallback_srk sha256")
    ++srktests+=("ECC transient fallback_srk sha256")
     +if [ "${with_sha384}" = "true" ]; then
     +    srktests+=("default transient no_fallback_srk sha384")
     +fi
      
      exit_status=0
      
    -@@ tests/tpm2_key_protector_test.in: declare -a nvtests=()
    - nvtests+=("persistent raw")
    - nvtests+=("nvindex raw")
    - nvtests+=("nvindex tpm2key")
    +@@ tests/tpm2_key_protector_test.in: done
    + 
    + # Testcases for NV index mode
    + declare -a nvtests=()
    +-nvtests+=("persistent raw")
    +-nvtests+=("nvindex raw")
    +-nvtests+=("nvindex tpm2key")
    ++nvtests+=("persistent raw sha256")
    ++nvtests+=("nvindex raw sha256")
    ++nvtests+=("nvindex tpm2key sha256")
     +if [ "${with_sha384}" = "true" ]; then
     +    nvtests+=("persistent raw sha384")
     +    nvtests+=("nvindex tpm2key sha384")
-- 
2.43.0


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

Reply via email to