[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 2/4] vtpm: passthru requests to manager
On 03/14/2014 12:48 PM, Ian Campbell wrote: On Wed, 2014-03-12 at 14:41 -0400, Daniel De Graaf wrote:When sending commands to a vTPM, commands with the VTPM_TAG_REQ2 tag are passed directly to the TPM Manager since they are used in the management interface to the TPM Manager. The VTPM_TAG_REQ tag is translated to TPM_TAG_RQU_COMMAND to allow access to the physical TPM for certain ordinals (PCRRead, Extend, and GetRandom).Is this translation sufficient to prevent other types of access getting passed through? (I presume the intention is not to let the guest access arbitrary pTPM functionality) The restriction on what commands are actually passed down to the physical TPM is handled by the TPM Manager, not the vTPM. Currently, only three commands are permitted for pass-through: GetRandom, PcrRead, and (only for a suitably privileged vTPM) Extend. Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx> --- stubdom/vtpm/vtpm.c | 40 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/stubdom/vtpm/vtpm.c b/stubdom/vtpm/vtpm.c index f67de18..61982c2 100644 --- a/stubdom/vtpm/vtpm.c +++ b/stubdom/vtpm/vtpm.c @@ -33,6 +33,7 @@ #include "vtpm_cmd.h" #include "vtpm_pcrs.h" #include "vtpmblk.h" +#include "vtpm_manager.h" #define TPM_LOG_INFO LOG_INFO #define TPM_LOG_ERROR LOG_ERR @@ -117,6 +118,40 @@ int init_random(void) { return 0; } +int check_passthru(tpmcmd_t* tpmcmd) { + TPM_TAG tag; + UINT32 len = 10; + BYTE* ptr; + size_t size; + + if(tpmcmd->req_len < 10) { + return false; + } + + ptr = tpmcmd->req; + tpm_unmarshal_UINT16(&ptr, &len, &tag); + + if (tag == VTPM_TAG_REQ2) { + info("VTPM passthru: %d bytes", (int)tpmcmd->req_len); + tpmfront_cmd(tpmfront_dev, tpmcmd->req, tpmcmd->req_len, &tpmcmd->resp, &size); + tpmcmd->resp_len = size; + info("VTPM passthru return: %d bytes", (int)size); + return true; + } + + if (tag == VTPM_TAG_REQ) { + info("VTPM pTPM-cmd: %d bytes", (int)tpmcmd->req_len); + ptr = tpmcmd->req; + tpm_marshal_UINT16(&ptr, &len, TPM_TAG_RQU_COMMAND); + tpmfront_cmd(tpmfront_dev, tpmcmd->req, tpmcmd->req_len, &tpmcmd->resp, &size); + tpmcmd->resp_len = size; + info("VTPM pTPM-cmd return: %d bytes", (int)size); + return true; + } + + return false; +} + int check_ordinal(tpmcmd_t* tpmcmd) { TPM_COMMAND_CODE ord; UINT32 len = 4; @@ -209,6 +244,9 @@ static void main_loop(void) { error("Invalid locality (%d) for client in tpm_handle_command", tpmcmd->locality); create_error_response(tpmcmd, TPM_FAIL); } + /* Check for TPM Manager passthrough command */ + else if(check_passthru(tpmcmd)) { + } /* Check for disabled ordinals */ else if(!check_ordinal(tpmcmd)) { create_error_response(tpmcmd, TPM_BAD_ORDINAL); @@ -231,7 +269,7 @@ static void main_loop(void) { } abort_postpcrs: - info("VTPM Shutting down\n"); + info("VTPM Shutting down"); tpm_emulator_shutdown(); } -- Daniel De Graaf National Security Agency _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |