mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
stubdom/vtpm: Support locality field
The vTPM protocol now contains a field allowing the locality of a command to be specified; pass this to the TPM when processing a packet. While the locality is not currently checked for validity, a binding between locality and some distinguishing feature of the client domain (such as the XSM label) will need to be defined in order to properly support a multi-client vTPM. Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov> Acked-by: Matthew Fioravante <matthew.fioravante@jhuapl.edu>
This commit is contained in:
1 parent
c9e6dcb08b
commit
57c265546e
3 files changed
+52
-1
No files matched your search
@@ -0,0 +1,50 @@
|
||||
diff --git a/tpm/tpm_capability.c b/tpm/tpm_capability.c
|
||||
index 60bbb90..f8f7f0f 100644
|
||||
--- a/tpm/tpm_capability.c
|
||||
+++ b/tpm/tpm_capability.c
|
||||
@@ -949,6 +949,8 @@ static TPM_RESULT set_vendor(UINT32 subCap, BYTE *setValue,
|
||||
UINT32 setValueSize, BOOL ownerAuth,
|
||||
BOOL deactivated, BOOL disabled)
|
||||
{
|
||||
+ if (tpmData.stany.flags.localityModifier != 8)
|
||||
+ return TPM_BAD_PARAMETER;
|
||||
/* set the capability area with the specified data, on failure
|
||||
deactivate the TPM */
|
||||
switch (subCap) {
|
||||
diff --git a/tpm/tpm_cmd_handler.c b/tpm/tpm_cmd_handler.c
|
||||
index 288d1ce..9e1cfb4 100644
|
||||
--- a/tpm/tpm_cmd_handler.c
|
||||
+++ b/tpm/tpm_cmd_handler.c
|
||||
@@ -4132,7 +4132,7 @@ void tpm_emulator_shutdown()
|
||||
tpm_extern_release();
|
||||
}
|
||||
|
||||
-int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint32_t *out_size)
|
||||
+int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint32_t *out_size, int locality)
|
||||
{
|
||||
TPM_REQUEST req;
|
||||
TPM_RESPONSE rsp;
|
||||
@@ -4140,7 +4140,9 @@ int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint3
|
||||
UINT32 len;
|
||||
BOOL free_out;
|
||||
|
||||
- debug("tpm_handle_command()");
|
||||
+ debug("tpm_handle_command(%d)", locality);
|
||||
+ if (locality != -1)
|
||||
+ tpmData.stany.flags.localityModifier = locality;
|
||||
|
||||
/* we need the whole packet at once, otherwise unmarshalling will fail */
|
||||
if (tpm_unmarshal_TPM_REQUEST((uint8_t**)&in, &in_size, &req) != 0) {
|
||||
diff --git a/tpm/tpm_emulator.h b/tpm/tpm_emulator.h
|
||||
index eed749e..4c228bd 100644
|
||||
--- a/tpm/tpm_emulator.h
|
||||
+++ b/tpm/tpm_emulator.h
|
||||
@@ -59,7 +59,7 @@ void tpm_emulator_shutdown(void);
|
||||
* its usage. In case of an error, all internally allocated memory
|
||||
* is released and the the state of out and out_size is unspecified.
|
||||
*/
|
||||
-int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint32_t *out_size);
|
||||
+int tpm_handle_command(const uint8_t *in, uint32_t in_size, uint8_t **out, uint32_t *out_size, int locality);
|
||||
|
||||
#endif /* _TPM_EMULATOR_H_ */
|
||||
|
||||