Re: [ PATCH vf-token 0/8] Introduce vf-token when using userspace PF

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue,  2 Jan 2024 18:55:10 +0530
Vivek Kashyap <vivek.kashyap@xxxxxxxxxxxxxxx> wrote:

> The VFIO PCI ABI has been extended to require userspace PF driver to set 
> a VF token to a known value. The VF drivers are then required to provide
> this token to access the VF device. The vf-token is set by the PF driver
> before VF drivers can access the device. The kernel provides no means to
> retrieve the token in use; but there is no specification describing the 
> distribution or level of confidentiality of the token.

At the same time, both the kernel and this series indicate the token is
a shared secret, which is the reason the kernel provides no means to
access the token.  Is it reasonable to have a secret shared token in
xml, logs, and QEMU command line?  The token is shared between all VFs
associated to a PF, so as this support more formally moves from a QEMU
one-off hack to libvirt support, are we revealing a secret by promoting
this model?

Furthermore, libvirt has always been able to consider the vfio-pci
device trusted, at least so far as it's provided by a kernel driver.
With VF token support, the VF driver itself may still be a kernel
driver, but the PF is managed via a userspace driver with unknown
capabilities relative to the integrity of the VF device.  I don't know
if we need to or how we take into account that lack of device
authentication.  Certainly without some degree of attestation of the PF
driver and VF token, or potentially a mechanism for a more
cryptographic statement of trust, such a device ought not to be
involved with a confidential VM.

I'm not sure what needs to be done here, maybe the device level trust
is a problem for a higher level management tool, but I'd like to take a
more thoughtful look at the implications of VF token support as we move
up the stack rather than position this as simply filling a gap in QEMU
vfio-pci support.  Thanks,

Alex

> Qemu has been 
> extended to require the vf-token when vf device is used. An important 
> point to note is that the vf-token is required only when both the PF and
> VF are used in userspace. 
> 
> This patch series adds support to provide the vf-token (uuid format) in the
> domain XML and to generate the qemu commandline including the vf-token.
> 
> To support vf-token the new element will be used as follows:
>    <hostdev mode='subsystem' type='pci' managed='yes'>
>       <driver name='vfio'/>
>       <source>
>         <address domain='0x0000' bus='0x0' slot='0x00' function='0x1'>
>         <vf-token uuid='00112233-4455-6677-8899-aabbccddeeff'/>
>         </address>
>       </source>
>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'/>
>     </hostdev>
> 
> The generated commandline will include the following:
> 
> -device {"driver":"vfio-pci","host":"0000:00:0.1",
>          "vf-token":"00112233-4455-6677-8899-aabbccddeeff",
>          "id":"hostdev0","bus":"pci.0","addr":"0x1"}
> 
> Changes since initial RFC based on review comments received:
> 1. Added documentation
> 2. Added test cases and ran successful test suite after each patch commit
> 3. fixed spaces, coding sytle, and uuid string format 
> 4. Used S:vftoken in virJSONValueObjectAdd instead of a conditional
> 
> Vivek Kashyap (8):
>   Define the vf-token extension for PCI device
>   Introduce the vf-token qemu capability
>   This patch introduces the PCI address extension flag for vf-token
>   This patch introduces new XML parser/formatter functions for parsing
>     the vf-token
>   Introduce a validation function for vf-token support in qemu and
>     generate vf-token device attribute in qemu command line
>   Provide information about the vf-token flag
>   Add tests for the vf-token flag to the qemuxml2argv and qemuxml2xml
>     test suites
>   Update news about vf-token
> 
>  NEWS.rst                                      |  8 +++
>  docs/formatdomain.rst                         |  3 ++
>  src/conf/device_conf.c                        | 49 ++++++++++++++++---
>  src/conf/domain_addr.h                        |  1 +
>  src/conf/domain_conf.c                        |  8 +++
>  src/conf/schemas/basictypes.rng               |  7 +++
>  src/libvirt_private.syms                      |  1 +
>  src/qemu/qemu_capabilities.c                  |  3 ++
>  src/qemu/qemu_capabilities.h                  |  1 +
>  src/qemu/qemu_command.c                       |  8 +++
>  src/qemu/qemu_domain_address.c                |  3 ++
>  src/qemu/qemu_validate.c                      | 20 ++++++++
>  src/util/virpci.c                             |  7 +++
>  src/util/virpci.h                             | 10 ++++
>  .../qemucapabilitiesdata/caps_8.1.0_s390x.xml |  1 +
>  .../caps_8.1.0_x86_64.xml                     |  1 +
>  .../caps_8.2.0_x86_64.xml                     |  1 +
>  .../hostdev-vfio-vf-token.x86_64-latest.args  | 34 +++++++++++++
>  .../hostdev-vfio-vf-token.xml                 | 22 +++++++++
>  tests/qemuxml2argvtest.c                      |  1 +
>  .../hostdev-vfio-vf-token.x86_64-latest.xml   | 40 +++++++++++++++
>  tests/qemuxml2xmltest.c                       |  1 +
>  22 files changed, 223 insertions(+), 7 deletions(-)
>  create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-vf-token.x86_64-latest.args
>  create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-vf-token.xml
>  create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-vf-token.x86_64-latest.xml
> 
_______________________________________________
Devel mailing list -- devel@xxxxxxxxxxxxxxxxx
To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxx




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux