qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Stefan Berger <stefanb@linux.vnet.ibm.com>
To: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v4 4/5] Qemu-Xen-vTPM: Qemu vTPM	xenstubdoms backen.
Date: Mon, 23 Mar 2015 16:06:23 -0400	[thread overview]
Message-ID: <5510723F.1090708@linux.vnet.ibm.com> (raw)
In-Reply-To: <945CA011AD5F084CBEA3E851C0AB28890E8C7563@SHSMSX101.ccr.corp.intel.com>

On 03/23/2015 08:44 AM, Xu, Quan wrote:
>
>> -----Original Message-----
>> From: Stefan Berger [mailto:stefanb@linux.vnet.ibm.com]
>> Sent: Thursday, March 19, 2015 3:17 AM
>> To: Xu, Quan; stefano.stabellini@eu.citrix.com; qemu-devel@nongnu.org;
>> armbru@redhat.com; lcapitulino@redhat.com; aliguori@amazon.com;
>> pbonzini@redhat.com; eblake@redhat.com; kraxel@redhat.com;
>> meyering@redhat.com; mjt@tls.msk.ru; sw@weilnetz.de; wei.liu2@citrix.com
>> Cc: xen-devel@lists.xen.org
>> Subject: Re: [PATCH v4 4/5] Qemu-Xen-vTPM: Qemu vTPM xenstubdoms
>> backen.
>>
>> On 03/10/2015 08:14 AM, Quan Xu wrote:
>>> This Patch provides the glue for the TPM_TIS(Qemu frontend) to Xen
>>> stubdom vTPM domain that provides the actual TPM functionality. It
>>> sends data and TPM commends with xen_vtpm_frontend. It is similar as
>>> another two vTPM backens:
>>>     *vTPM passthrough backen Since QEMU 1.5.
>>>     *vTPM libtpms-based backen.
>>>
>>> Some details:
>>> This part of the patch provides support for the spawning of a thread
>>> that will interact with stubdom vTPM domain by the xen_vtpm_frontend.
>>> It expects a signal from the frontend to wake and pick up the TPM
>>> command that is supposed to be processed and delivers the response
>>> packet using a callback function provided by the frontend.
>>>
>>> The backend connects itself to the frontend by filling out an
>>> interface structure with pointers to the function implementing support
>>> for various operations.
>>>
>>> (QEMU) vTPM XenStubdoms backen is initialized by Qemu command line
>> options,
>>>         "-tpmdev xenstubdoms,id=xenvtpm0 -device
>> tpm-tis,tpmdev=xenvtpm0"
>>> --Changes in v3:
>>> -Call vtpm_send() and vtpm_recv() directly
>>>
>>> --Changes in v4:
>>> -Fix the comment style
>>>
>>> Signed-off-by: Quan Xu <quan.xu@intel.com>
>>> ---
>>>    hw/tpm/Makefile.objs     |   2 +-
>>>    hw/tpm/tpm_xenstubdoms.c | 247
>> +++++++++++++++++++++++++++++++++++++++++++++++
>>>    2 files changed, 248 insertions(+), 1 deletion(-)
>>>    create mode 100644 hw/tpm/tpm_xenstubdoms.c
>>>
>>> diff --git a/hw/tpm/Makefile.objs b/hw/tpm/Makefile.objs index
>>> 57919fa..190e776 100644
>>> --- a/hw/tpm/Makefile.objs
>>> +++ b/hw/tpm/Makefile.objs
>>> @@ -1,3 +1,3 @@
>>>    common-obj-$(CONFIG_TPM_TIS) += tpm_tis.o
>>>    common-obj-$(CONFIG_TPM_PASSTHROUGH) += tpm_passthrough.o
>>> -common-obj-$(CONFIG_TPM_XENSTUBDOMS) += xen_vtpm_frontend.o
>>> +common-obj-$(CONFIG_TPM_XENSTUBDOMS) += tpm_xenstubdoms.o
>>> +xen_vtpm_frontend.o
>>> diff --git a/hw/tpm/tpm_xenstubdoms.c b/hw/tpm/tpm_xenstubdoms.c new
>>> file mode 100644 index 0000000..6d0dc32
>>> --- /dev/null
>>> +++ b/hw/tpm/tpm_xenstubdoms.c
>>> @@ -0,0 +1,247 @@
>>> +/*
>>> + * Xen Stubdom vTPM driver
>>> + *
>>> + *  Copyright (c) 2015 Intel Corporation
>>> + *  Authors:
>>> + *    Quan Xu <quan.xu@intel.com>
>>> + *
>>> + * This library is free software; you can redistribute it and/or
>>> + * modify it under the terms of the GNU Lesser General Public
>>> + * License as published by the Free Software Foundation; either
>>> + * version 2 of the License, or (at your option) any later version.
>>> + *
>>> + * This library is distributed in the hope that it will be useful,
>>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>>> + * Lesser General Public License for more details.
>>> + *
>>> + * You should have received a copy of the GNU Lesser General Public
>>> + * License along with this library; if not, see
>>> +<http://www.gnu.org/licenses/>  */
>>> +
>>> +#include <dirent.h>
>>> +#include "qemu-common.h"
>>> +#include "qapi/error.h"
>>> +#include "qemu/sockets.h"
>>> +#include "qemu/log.h"
>>> +#include "sysemu/tpm_backend.h"
>>> +#include "tpm_int.h"
>>> +#include "hw/hw.h"
>>> +#include "hw/i386/pc.h"
>>> +#include "hw/xen/xen_backend.h"
>>> +#include "sysemu/tpm_backend_int.h"
>>> +#include "tpm_tis.h"
>>> +
>>> +#ifdef DEBUG_TPM
>>> +#define DPRINTF(fmt, ...) \
>>> +    do { fprintf(stderr, fmt, ## __VA_ARGS__); } while (0) #else
>>> +#define DPRINTF(fmt, ...) \
>>> +    do { } while (0)
>>> +#endif
>>> +
>>> +#define TYPE_TPM_XENSTUBDOMS "tpm-xenstubdoms"
>>> +#define TPM_XENSTUBDOMS(obj) \
>>> +    OBJECT_CHECK(TPMXenstubdomsState, (obj),
>> TYPE_TPM_XENSTUBDOMS)
>>> +
>>> +static const TPMDriverOps tpm_xenstubdoms_driver;
>>> +
>>> +/* Data structures */
>>> +typedef struct TPMXenstubdomsThreadParams {
>>> +    TPMState *tpm_state;
>>> +    TPMRecvDataCB *recv_data_callback;
>>> +    TPMBackend *tb;
>>> +} TPMXenstubdomsThreadParams;
>>> +
>>> +struct TPMXenstubdomsState {
>>> +    TPMBackend parent;
>>> +    TPMBackendThread tbt;
>>> +    TPMXenstubdomsThreadParams tpm_thread_params;
>>> +    bool had_startup_error;
>>> +};
>>> +
>>> +typedef struct TPMXenstubdomsState TPMXenstubdomsState;
>>> +
>>> +/* Functions */
>>> +static void tpm_xenstubdoms_cancel_cmd(TPMBackend *tb);
>>> +
>>> +static int tpm_xenstubdoms_unix_transfer(const TPMLocality
>>> +*locty_data) {
>>> +    size_t rlen;
>>> +    struct XenDevice *xendev;
>>> +
>>> +    xendev = xen_find_xendev("vtpm", xen_domid, xenstore_dev);
>>> +    if (xendev == NULL) {
>>> +        xen_be_printf(xendev, 0, "Con not find vtpm device\n");
>> Con not -> Cannot
>>> +        return -1;
>>> +    }
>>> +    vtpm_send(xendev, locty_data->w_buffer.buffer,
>> locty_data->w_offset);
>>> +    vtpm_recv(xendev, locty_data->r_buffer.buffer, &rlen);
>>> +    return 0;
>>> +}
>>> +
>>> +static void tpm_xenstubdoms_worker_thread(gpointer data,
>>> +                                          gpointer user_data) {
>>> +    TPMXenstubdomsThreadParams *thr_parms = user_data;
>>> +    TPMBackendCmd cmd = (TPMBackendCmd)data;
>>> +
>>> +    switch (cmd) {
>>> +    case TPM_BACKEND_CMD_PROCESS_CMD:
>>> +
>>> +        /* here need a the cmd process function */
>>> +
>> tpm_xenstubdoms_unix_transfer(thr_parms->tpm_state->locty_data);
>>> +        thr_parms->recv_data_callback(thr_parms->tpm_state,
>>> +
>>> + thr_parms->tpm_state->locty_number);
>> By now you'll need another parameter here indicating whether the command
>> that was issues was a selftest and whether it completed successfully. It should be
>> easy to support this and you could move
>> tpm_passthrough_is_selftest() into tpm_util.c and rename it to
>> tpm_util_is_selftest(). But this should be done in a separate patch.
>>
> Thanks Stefan.
> One question, why should we highlight 'SelfTest' command?
> Similar to TPM passthrough Driver backen, worker thread is just for distributing process command.
> As I know, the command is from guest virtual machine kernel's tpm_tis.ko, if 'SelfTest' command
> Is failed, the guest virtual machine's tpm_tis.ko will return directly.

The TPM TIS 1.3 specification introduced a new flag in the status 
register in bit 2. Have a look at the specs here:

http://www.trustedcomputinggroup.org/files/static_page_files/8E45D739-1A4B-B294-D06274E7047730FD/TCG_PCClientTPMInterfaceSpecification_TIS__1-3_27_03212013.pdf

On page 68 that bit is explained and we need to find out whether to set 
or clear it.

    Stefan

  reply	other threads:[~2015-03-23 20:06 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-10 12:14 [Qemu-devel] [PATCH v4 0/5] QEMU:Xen stubdom vTPM for HVM virtual machine Quan Xu
2015-03-10 12:14 ` [Qemu-devel] [PATCH v4 1/5] Qemu-Xen-vTPM: Support for Xen stubdom vTPM command line options Quan Xu
2015-03-11 21:17   ` Eric Blake
2015-03-10 12:14 ` [Qemu-devel] [PATCH v4 2/5] Qemu-Xen-vTPM: Xen frontend driver infrastructure Quan Xu
2015-03-10 12:14 ` [Qemu-devel] [PATCH v4 3/5] Qemu-Xen-vTPM: Register Xen stubdom vTPM frontend driver Quan Xu
2015-03-18 18:59   ` Stefan Berger
2015-03-10 12:14 ` [Qemu-devel] [PATCH v4 4/5] Qemu-Xen-vTPM: Qemu vTPM xenstubdoms backen Quan Xu
2015-03-18 19:17   ` Stefan Berger
2015-03-19  1:34     ` Xu, Quan
2015-03-23 12:44     ` Xu, Quan
2015-03-23 20:06       ` Stefan Berger [this message]
2015-03-10 12:14 ` [Qemu-devel] [PATCH v4 5/5] Qemu-Xen-vTPM: QEMU machine class is initialized before tpm_init() Quan Xu
2015-03-20 11:26   ` Stefan Berger
2015-03-23  1:43     ` Xu, Quan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5510723F.1090708@linux.vnet.ibm.com \
    --to=stefanb@linux.vnet.ibm.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).