tss2: Add TPM 2.0 NV index commands

The following TPM 2.0 commands are introduced to tss2 to access the
TPM non-volatile memory associated with the NV index handles:
  - TPM2_NV_DefineSpace,
  - TPM2_NV_UndefineSpace,
  - TPM2_NV_ReadPublic,
  - TPM2_NV_Read,
  - TPM2_NV_Write.

The related marshal/unmarshal functions are also introduced.

Signed-off-by: Gary Lin <glin@suse.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
This commit is contained in:
Gary Lin authored and Daniel Kiper committed 2025-04-10 18:04:48 +02:00
1 parent 041164d00e
commit 75c480885a
5 files changed
+290

No files matched your search

+39
View File
@@ -17,6 +17,7 @@
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
#include <grub/mm.h>
#include <grub/misc.h>
#include <tss2_mu.h>
@@ -572,6 +573,37 @@ grub_Tss2_MU_TPMT_TK_VERIFIED_Marshal (grub_tpm2_buffer_t buffer,
grub_Tss2_MU_TPM2B_Marshal (buffer, p->digest.size, p->digest.buffer);
}
void
grub_Tss2_MU_TPMS_NV_PUBLIC_Marshal (grub_tpm2_buffer_t buffer,
const TPMS_NV_PUBLIC_t *p)
{
grub_tpm2_buffer_pack_u32 (buffer, p->nvIndex);
grub_tpm2_buffer_pack_u16 (buffer, p->nameAlg);
grub_tpm2_buffer_pack_u32 (buffer, p->attributes);
grub_Tss2_MU_TPM2B_Marshal (buffer, p->authPolicy.size, p->authPolicy.buffer);
grub_tpm2_buffer_pack_u16 (buffer, p->dataSize);
}
void
grub_Tss2_MU_TPM2B_NV_PUBLIC_Marshal (grub_tpm2_buffer_t buffer,
const TPM2B_NV_PUBLIC_t *p)
{
grub_uint32_t start;
grub_uint16_t size;
if (p != NULL)
{
grub_tpm2_buffer_pack_u16 (buffer, p->size);
start = buffer->size;
grub_Tss2_MU_TPMS_NV_PUBLIC_Marshal (buffer, &p->nvPublic);
size = grub_cpu_to_be16 (buffer->size - start);
grub_memcpy (&buffer->data[start - sizeof (grub_uint16_t)], &size, sizeof (size));
}
else
grub_tpm2_buffer_pack_u16 (buffer, 0);
}
static void
__Tss2_MU_TPM2B_BUFFER_Unmarshal (grub_tpm2_buffer_t buffer,
TPM2B_t *p, grub_uint16_t bound)
@@ -982,6 +1014,13 @@ grub_Tss2_MU_TPM2B_NV_PUBLIC_Unmarshal (grub_tpm2_buffer_t buffer,
grub_Tss2_MU_TPMS_NV_PUBLIC_Unmarshal (buffer, &p->nvPublic);
}
void
grub_Tss2_MU_TPM2B_NAX_NV_BUFFER_Unmarshal (grub_tpm2_buffer_t buffer,
TPM2B_MAX_NV_BUFFER_t *p)
{
TPM2B_BUFFER_UNMARSHAL (buffer, TPM2B_MAX_NV_BUFFER_t, p);
}
void
grub_Tss2_MU_TPM2B_NAME_Unmarshal (grub_tpm2_buffer_t buffer,
TPM2B_NAME_t *n)