On Tue, Oct 31, 2023 at 3:56 PM Alexey Kardashevskiy <aik@xxxxxxx> wrote: > > Hi everyone, > Hi Alexey. > Here is followup after the Dan's community call we had weeks ago. > > Our (AMD) goal at the moment is TDISP to pass through SRIOV VFs to > confidential VMs without trusting the HV and with enabled IDE > (encryption) and IOMMU (performance, compared to current SWIOTLB). I am > aware of other uses and vendors and I spend hours unsuccessfully trying > to generalize all this in a meaningful way. > > The AMD SEV TIO verbs can be simplified as: > > - device_connect - starts CMA/SPDM session, returns measurements/certs, > runs IDE_KM to program the keys; > - device_reclaim - undo the connect; > - tdi_bind - transition the TDI to TDISP's LOCKED and RUN states, > generates interface report; > - tdi_unbind - undo the bind; > - tdi_info - read measurements/certs/interface report; Only read? Can user space not provide a nonce for replay protection here, or is that just inherent to the SPDM channel setup, and the user's replay-protected acceptance of the booted code, including this SPDM communication logic? I'm not fully up to speed here. > - tdi_validate - unlock TDI's MMIO and IOMMU (or invalidate, depends on > the parameters). > > The first 4 called by the host OS, the last two by the TVM ("Trusted > VM"). These are implemented in the AMD PSP (platform processor). > There are CMA/SPDM, IDE_KV, TDISP in use. > > Now, my strawman code does this on the host (I simplified a bit): > - after PCI discovery but before probing: walk through all TDISP-capable > (TEE-IO in PCIe caps) endpoint devices and call device_connect; > - when drivers probe - it is all set up and the device measurements are > visible to the driver; > - when constructing a TVM, tdi_bind is called; > > and then in the TVM: > - after PCI discovery but before probing: walk through all TDIs (which > will have TEE IO bit set) and call tdi_info, verify the report, if ok - > call tdi_validate; > - when drivers probe - it is all set up and the driver decides if/which > DMA mode to use (SWIOTLB or direct), or panic(). > > > Uff. Too long already. Sorry. Now, go to the problems: > > If the user wants only CMA/SPDM, the Lukas'es patched will do that > without the PSP. This may co-exist with the AMD PSP (if the endpoint > allows multiple sessions). > > If the user wants only IDE, the AMD PSP's device_connect needs to be > called and the host OS does not get to know the IDE keys. Other vendors > allow programming IDE keys to the RC on the baremetal, and this also may > co-exist with a TSM running outside of Linux - the host still manages > trafic classes and streams. > > If the user wants TDISP for VMs, this assumes the user does not trust > the host OS and therefore the TSM (which is trusted) has to do CMA/SPDM > and IDE. > > The TSM code is not Linux and not shared among vendors. CMA/SPDM and IDE > seem capable of co-existing, TDISP does not. > > However there are common bits. > - certificates/measurements/reports blobs: storing, presenting to the > userspace (results of device_connect and tdi_bind); > - place where we want to authenticate the device and enable IDE > (device_connect); > - place where we want to bind TDI to a TVM (tdi_bind). > > I've tried to address this with my (poorly named) > drivers/pci/pcie/tdisp.ko and a hack for VFIO PCI device to call tdi_bind. > > The next steps: > - expose blobs via configfs (like Dan did configfs-tsm); I think that the blob interface should be reworked, as Sean and I have commented on for the SEV-SNP host patch series. For example, the amount of memory needed for the blob should be configurable by the host through a proposed size. These vendored certificates will only grow in size, and they're device-specific, so it makes sense for machines to have a local cache of all the provisioned certificates that get forwarded to the guest through the VMM. I'd like to see this kind of blob reporting as a more general mechanism, however, so we can get TDX-specific blobs in too without much fuss. I'm not _fully_ opposed to ditching this blob idea and just requiring the guest to contact a RIM service for all these certs, but generally I think that's a bit of an objectionable barrier to entry. And more work I'll need to do, lol. Probably still will have to eventually for short-lived claims. We then have another API to try to standardize that IETF RATS doesn't try to touch. All that aside, it doesn't seem like tsm/report is going to be the right place to get attestations from various devices. It's only designed for attesting the CPU. Would the idea be to have a new WO attribute that is some kind of TDI id, and that multiplexes out to the different TDI? > - s/tdisp.ko/coco.ko/; > - ask the audience - what is missing to make it reusable for other > vendors and uses? > > Thanks, > -- > Alexey > > > -- -Dionna Glaze, PhD (she/her)