[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 1/5] vTPM: event channel bind interdomain with para/hvm virtual machine
> -----Original Message----- > From: Daniel De Graaf [mailto:dgdegra@xxxxxxxxxxxxx] > Sent: Friday, January 09, 2015 1:48 AM > To: Xu, Quan; xen-devel@xxxxxxxxxxxxx > Cc: samuel.thibault@xxxxxxxxxxxx; stefano.stabellini@xxxxxxxxxxxxx > Subject: Re: [PATCH v2 1/5] vTPM: event channel bind interdomain with > para/hvm virtual machine > > On 01/08/2015 11:49 AM, Xu, Quan wrote: > > > > > >> -----Original Message----- > >> From: Daniel De Graaf [mailto:dgdegra@xxxxxxxxxxxxx] > >> Sent: Thursday, January 08, 2015 11:55 PM > >> To: Xu, Quan; xen-devel@xxxxxxxxxxxxx > >> Cc: samuel.thibault@xxxxxxxxxxxx; stefano.stabellini@xxxxxxxxxxxxx > >> Subject: Re: [PATCH v2 1/5] vTPM: event channel bind interdomain with > >> para/hvm virtual machine > >> > >> On 01/08/2015 03:20 AM, Xu, Quan wrote: > >>> > >>> > >>>> -----Original Message----- > >>>> From: Daniel De Graaf [mailto:dgdegra@xxxxxxxxxxxxx] > >>>> Sent: Wednesday, January 07, 2015 3:47 AM > >>>> To: Xu, Quan; xen-devel@xxxxxxxxxxxxx > >>>> Cc: samuel.thibault@xxxxxxxxxxxx; stefano.stabellini@xxxxxxxxxxxxx > >>>> Subject: Re: [PATCH v2 1/5] vTPM: event channel bind interdomain > >>>> with para/hvm virtual machine > >>>> > >>>> On 01/06/2015 11:46 AM, Xu, Quan wrote: > >>>>>> -----Original Message----- > >>>>>> From: Daniel De Graaf [mailto:dgdegra@xxxxxxxxxxxxx] On > >>>>>> 12/30/2014 > >>>>>> 11:44 PM, Quan Xu wrote:[...] > >>>>>>> diff --git a/extras/mini-os/tpmback.c b/extras/mini-os/tpmback.c > >>>>>> [...] > >>>>>>> + domid = (domtype == T_DOMAIN_TYPE_HVM) ? 0 : tpmif->domid; > >>>>>> > >>>>>> Unless I'm missing something, this still assumes that the HVM > >>>>>> device model is located in domain 0, and so it will not work if a > >>>>>> stub domain is used for qemu. > >>>>>> > >>>>> > >>>>> QEMU is running in Dom0 as usual, so the domid is 0. > >>>>> as similar to Linux PV frontend driver, this frontend driver is > >>>>> enabled in > >>>> QEMU. > >>>> > >>>> This is a valid configuration of Xen and these patches do suffice > >>>> to make it work. I am trying to ensure that an additional type of > >>>> guest setup will also work with these patches. > >>>> > >>>> A useful feature of Xen is the ability to execute the QEMU device > >>>> model in a domain instead of a process in dom0. When combined with > >>>> driver domains for devices, this can significantly reduce both the > >>>> attack surface of and amount of trust required of domain 0. > >>>> > >>>>> Any doubt, feel free to contact. I will try my best to explain. I > >>>>> think your > >>>> suggestions are very helpful in previous email(Oct. 31th, 2014. > >>>>> ' Re: FW: [PATCH 1/6] vTPM: event channel bind interdomain with > >>>>> para/hvm virtual machine') Maybe this is still a vague description > >>>>> :( > >>>> > >>>> This is accurate but possibly incomplete. > >>>> > >>>> This is my current understanding of the communications paths and > >>>> support for vTPMs in Xen: > >>>> > >>>> Physical TPM (1.2; with new patches, may also be 2.0) > >>>> | > >>>> [MMIO pass-through] > >>>> | > >>>> vtpmmgr domain > >>>> | > >>>> [minios tpmback/front] ----- ((other domains' vTPMs)) > >>>> | > >>>> vTPM domain (currently always emulates a TPM v1.2) > >>>> | > >>>> [minios tpmback]+----[Linux tpmfront]-- PV Linux domain (fully > working) > >>>> | \ > >>>> | +--[Linux tpmfront]-- HVM Linux with optional > PV > >>>> drivers > >>>> | \ > >>>> [QEMU XenDevOps] [minios or Linux tpmfront] > >>>> | | > >>>> QEMU dom0 process QEMU stub-domain > >>>> | | > >>>> [MMIO emulation] [MMIO emulation] > >>>> | | > >>>> Any HVM guest Any HVM guest > >>>> > >>> > >>> Great, good architecture. The following part is not put into account > >>> in my > >> previous design. > >>> > >>> [minios or Linux tpmfront] > >>> | > >>> QEMU stub-domain > >>> | > >>> [MMIO emulation] > >>> | > >>> Any HVM guest > >>> > >>> Thanks Graaf for sharing your design. > >>>> > >>>> The series you are sending will enable QEMU to talk to tpmback directly. > >>>> This is the best solution when QEMU is running inside domain 0, > >>>> because it is not currently a good idea to use Linux's tpmfront > >>>> driver to talk to each guest's vTPM domain. > >>>> > >>>> When QEMU is run inside a stub domain, there are a few more things > >>>> to > >>>> consider: > >>>> > >>>> * This stub domain will not have domain 0; the vTPM must bind > >>>> to another > >>>> domain ID. > >>>> * It is possible to use the native TPM driver for the stub > >>>> domain (which may > >>>> either run Linux or mini-os) because there is no conflict > >>>> with a real > >> TPM > >>>> software stack running inside domain 0 > >>>> > >>>> Supporting this feature requires more granularity in the TPM > >>>> backend changes. > >>>> The vTPM domain's backend must be able to handle: > >>>> > >>>> (1) guest domains which talk directly to the vTPM on their own > behalf > >>>> (2) QEMU processes in domain 0 > >>>> (3) QEMU domains which talk directly to the vTPM on behalf of a > >>>> guest > >>>> > >>>> Cases (1) and (3) are already handled by the existing tpmback if > >>>> the proper domain ID is used. > >>>> > >>>> Your patch set currently breaks case (1) and (3) for HVM guests > >>>> while enabling case (2). An alternate solution that does not break > >>>> these cases while enabling case (2) is preferable. > >>>> > >>>> My thoughts on extending the xenstore interface via an example: > >>>> > >>>> Domain 0: runs QEMU for guest A > >>>> Domain 1: vtpmmgr > >>>> Domain 2: vTPM for guest A > >>>> Domain 3: HVM guest A > >>>> > >>>> Domain 4: vTPM for guest B > >>>> Domain 5: QEMU stubdom for guest B > >>>> Domain 6: HVM guest B > >>>> > >>>> /local/domain/2/backend/vtpm/3/0/*: backend A-PV > >>>> /local/domain/3/device/vtpm/0/*: frontend A-PV > >>>> > >>>> /local/domain/2/backend/vtpm/0/3/*: backend A-QEMU > >>>> /local/domain/0/qemu-device/vtpm/3/*: frontend A-QEMU (uses > >>>> XenDevOps) > >>> > >>> I think '/local/domain/0/frontend/vtpm/3/0' is much better. Similar > >>> as some backend in Qemu running in Domain-0, it always Stores as > >> '/local/domain/0/backend/qdisk/1 .etc'. I will also modify QEMU code > >> to make '/local/domain/0/frontend/DEVICE' > >>> As a general design for general QEMU frontend running in Domain-0. > >>> > >>> For this example, > >>> Domain 0: runs QEMU for guest A > >>> Domain 1: vtpmmgr > >>> Domain 2: vTPM for guest A > >>> Domain 3: HVM guest A > >>> > >>> I will design XenStore as following: > >>> > >>> ## XenStore >> ### > >>> local = "" > >>> domain = "" > >>> 0 = "" > >>> frontend = "" > >>> vtpm = "" > >>> 3 = "" > >>> 0 = "" > >>> backend = "/local/domain/2/backend/vtpm/3/0" > >>> backend-id = "2" > >>> state = "*" > >>> handle = "0" > >>> ring-ref = "*" > >>> event-channel = "*" > >>> feature-protocol-v2 = "1" > >>> backend = "" > >>> qdisk = "" > >>> [...] > >>> console = "" > >>> vif = "" > >>> [...] > >>> 2 = "" > >>> [...] > >>> backend = "" > >>> vtpm = "" > >>> 3 = "" > >>> 0 = "" > >>> frontend = "/local/domain/0/frontend/vtpm/3/0" > >>> frontend-id = "0" ('0', frontend is running in Domain-0) > >>> [...] > >>> 3 = "" > >>> [...] > >>> device = "" (frontend device, the backend is running in QEMU/.etc) > >>> vkbd = "" > >>> [...] > >>> vif = "" > >>> [...] > >>> ## XenStore << ## > >>> > >>> Then, the source code can read xenStore to get frontend-id or > >>> frontend > >> directly. > >>> If you agree with it, I will modify source code to align with above > >>> XenStore > >> design. > >> > >> I like the /local/domain/0/frontend/* path better than my initial > >> qemu suggestion, but I think the domain ID used should be the domain > >> ID of the vTPM domain, similar to how backends for the qemu stubdom > >> are done. In this example, the paths would be > >> "/local/domain/0/frontend/vtpm/2/0" and > "/local/domain/2/backend/vtpm/0/0". > > > > Thanks Graaf. > > Domain 0: runs QEMU for guest A > > Domain 1: vtpmmgr > > Domain 2: vTPM for guest A > > Domain 3: HVM guest A > > > > /local/domain/0/frontend/vtpm/2/0 > > /local/domain/2/backend/vtpm/0/0 > > > > I have one question. How does Domain 3 read/write XenStore? Such as > > /local/domain/0/frontend/vtpm/2/* > > > > In QEMU frontend, it can get Domain ID -- '3', but it does know the backend > domain ID is '2'. > > I would have this as a parameter in describing the vTPM device, similar to how > the file name of the disk images are described. The actual command line or > configuration for QEMU might use a domain name instead of a domain ID. I > would check to see how disk or network backend domains are handled (I > assume they are supported by qemu-in-dom0; I don't recall testing that setup > myself) . Thanks. I will also check to see how disk or network backend domains are handled. Any result, I will send out. Quan > > >> This avoids introducing a dependency on the domain ID of the guest in > >> a connection that does not directly involve that domain. If a guest > >> ever needs two vTPMs or multiple guests share a vTPM, this method of > >> constructing the paths will avoid unneeded conflicts (though I don't > >> expect either of these situations to be normal). > >> > >>>> > >>>> /local/domain/4/backend/vtpm/5/0/*: backend B-QEMU > >>>> /local/domain/5/device/vtpm/0/*: frontend B-QEMU > >>>> > >>>> /local/domain/4/backend/vtpm/6/0/*: backend B-PV > >>>> /local/domain/6/device/vtpm/0/*: frontend B-PV > >>>> > >>>> Connections A-PV, B-PV, and B-QEMU would be created in the same > >>>> manner as the existing "xl vtpm-attach" command does now. If the > >>>> HVM guest is not running Linux with the Xen tpmfront.ko loaded, the > >>>> A-PV and B-PV devices will remain unconnected; this is fine. > >>>> > >>>> Connection A-QEMU has a modified frontend state path to prevent > >>>> Linux from attaching its own TPM driver to the guest's TPM. > >>> > >>> Your design is working. For this case, > >>> > >>> Domain 4: vTPM for guest B > >>> Domain 5: QEMU stubdom for guest B > >>> Domain 6: HVM guest B > >>> > >>> As my understanding, Xl tools will create Donmain 5 as a PV domain. > >>> It works as Existing solutions. I think it can extend with libvirt too. > >>> You can make Domain 6 connected Domain 5 by QEMU command line > >> options, > >>> and it Is quite similar to TPM passthrough. > >> > >> Yes, this setup should be possible today once the proper device > >> configuration is added to the QEMU configuration. > >> > >>> So in this case, we don't care '-PV' or '-Qemu'. also '-pv'/'-QEMU' > >>> are > >> confusing in XenStore. > >> > >> Yes; this was one reason I did not want to introduce an "HVM" type in > Xenstore. > >> > > > > Hope someone can implement it...:) > > > > Intel > > Quan Xu > > > >> -- > >> Daniel De Graaf > >> National Security Agency > > > > > > > -- > 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 |