All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
From: Jason Gunthorpe <jgg@nvidia.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: Joerg Roedel <joro@8bytes.org>,
	"Tian, Kevin" <kevin.tian@intel.com>,
	Jean-Philippe Brucker <jean-philippe@linaro.org>,
	David Gibson <david@gibson.dropbear.id.au>,
	Jason Wang <jasowang@redhat.com>,
	"parav@mellanox.com" <parav@mellanox.com>,
	"Enrico Weigelt, metux IT consult" <lkml@metux.net>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Shenming Lu <lushenming@huawei.com>,
	Eric Auger <eric.auger@redhat.com>,
	Jonathan Corbet <corbet@lwn.net>,
	"Raj, Ashok" <ashok.raj@intel.com>,
	"Liu, Yi L" <yi.l.liu@intel.com>, "Wu, Hao" <hao.wu@intel.com>,
	"Jiang, Dave" <dave.jiang@intel.com>,
	Jacob Pan <jacob.jun.pan@linux.intel.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Robin Murphy <robin.murphy@arm.com>,
	"kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"iommu@lists.linux-foundation.org"
	<iommu@lists.linux-foundation.org>,
	David Woodhouse <dwmw2@infradead.org>,
	LKML <linux-kernel@vger.kernel.org>,
	Lu Baolu <baolu.lu@linux.intel.com>
Subject: Re: Plan for /dev/ioasid RFC v2
Date: Mon, 14 Jun 2021 11:07:11 -0300	[thread overview]
Message-ID: <20210614140711.GI1002214@nvidia.com> (raw)
In-Reply-To: <20210612105711.7ac68c83.alex.williamson@redhat.com>

On Sat, Jun 12, 2021 at 10:57:11AM -0600, Alex Williamson wrote:
> On Fri, 11 Jun 2021 22:28:46 -0300
> Jason Gunthorpe <jgg@nvidia.com> wrote:
> 
> > On Fri, Jun 11, 2021 at 01:38:28PM -0600, Alex Williamson wrote:
> > 
> > > That's fine for a serial port, but not a device that can do DMA.
> > > The entire point of vfio is to try to provide secure, DMA capable
> > > userspace drivers.  If we relax enforcement of that isolation we've
> > > failed.  
> > 
> > I don't understand why the IOASID matters at all in this. Can you
> > explain? What is the breach of isolation?
> 
> I think we're arguing past each other again.  VFIO does not care one
> iota how userspace configures IOASID domains for devices.  OTOH, VFIO
> must be absolutely obsessed that the devices we're providing userspace
> access to are isolated and continue to be isolated for the extent of
> that access.  Given that we define that a group is the smallest set of
> devices that can be isolated, that means that for a device to be
> isolated, the group needs to be isolated.
> 
> VFIO currently has a contract with the IOMMU backend that a group is
> attached to an IOMMU context (container) and from that point forward,
> all devices within that group are known to be isolated.

Sure - and maybe this is the source of the confusion as I've been
assuming we'd change the kernel to match what we are doing. As in the
other note a device under VFIO control should immediately have it's
IOMMU programmed to block all DMA. This is basically attaching it to a
dummy ioasid with an empty page table.

So before VFIO exposes any char device all devices/groups under VFIO
control cannot do any DMA. The only security/isolation harmful action
they can do is DMA to devices in the same group.

> I'm trying to figure out how a device based interface to the IOASID can
> provide that same contract or whether VFIO needs to be able to monitor
> the IOASID attachments of the devices in a group to control whether
> device access is secure.

Can you define what specifically secure, and isolation means?

To my mind it is these three things:

 1. The device can only do DMA to memory put into its security context
 2. No other security context can control this device
 3. No other security context can do DMA to my userspace memory

Today in VFIO the security context is the group fd. I would like the
security context to be the iommu fd.

1 is achieved by ensuring the device is always connected to an
IOASID. Today the group fd requires an IOASID before it hands out a
device_fd. With iommu_fd the device_fd will not allow IOCTLs until it
has a blocked DMA IOASID and is successefully joined to an iommu_fd.

2 is achieved by ensuring that two security contexts can't open
devices in the same group. Today the group fd deals with this by being
single open. With iommu_fd the kenerl would not permit splitting
groups between iommu_fds.

3 is achieved today by the group_fd enforcing a single IOASID on all
devices. Under iommu_fd all devices in the group can use any IOASID in
their iommu_fd security domain.

It is a slightly different model than VFIO uses, but I don't think it
provides less isolation.

> Otherwise, for a device centric VFIO/IOASID model, I need to understand
> exactly when and how VFIO can know that it's safe to provide access to
> a device and how the IOASID model guarantees the ongoing safety of that
> access, which must encompass the safety relative to the entire group.

Lets agree on what safety means then we can evaluate it.

> For example, is it VFIO's job to BIND every device in the group?  

I'm thinking no

> Does binding the device represent the point at which the IOASID
> takes responsibility for the isolation of the device?

Following Kevin's language BIND is when the device_fd and iommu_fd are
connected. That is when I see the device as becoming usable. Whatever
security/isolation requirements we decide should be met here

> If instead it's the ATTACH of a device that provides the isolation,
> how is VFIO supposed to

Not the attach

> DETACH occur through the IOASIDfd rather than the VFIOfd?  It seems
> like the IOASIDfd is going to need ways to manipulate device:IOASID
> mappings outside of VFIO, so again I wonder if we should switch to an
> IOASID uAPI at that point rather than using VFIO.  Thanks,

I don't think so... When the VFIO device_fd is closed it should
disonnect the iommu from its device, restore the blocked DMA
configuration, and then remove itself from the iommu_fd.

Once the device is back to blocked DMA there is no further need for
the iommu_fd to touch it.

Jason

WARNING: multiple messages have this Message-ID (diff)
From: Jason Gunthorpe <jgg@nvidia.com>
To: Alex Williamson <alex.williamson@redhat.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	Jason Wang <jasowang@redhat.com>,
	Kirti Wankhede <kwankhede@nvidia.com>,
	Jean-Philippe Brucker <jean-philippe@linaro.org>,
	"Jiang, Dave" <dave.jiang@intel.com>,
	"Raj, Ashok" <ashok.raj@intel.com>,
	Jonathan Corbet <corbet@lwn.net>,
	"Tian, Kevin" <kevin.tian@intel.com>,
	"parav@mellanox.com" <parav@mellanox.com>,
	"Enrico Weigelt, metux IT consult" <lkml@metux.net>,
	David Gibson <david@gibson.dropbear.id.au>,
	Robin Murphy <robin.murphy@arm.com>,
	LKML <linux-kernel@vger.kernel.org>,
	Shenming Lu <lushenming@huawei.com>,
	"iommu@lists.linux-foundation.org"
	<iommu@lists.linux-foundation.org>,
	Paolo Bonzini <pbonzini@redhat.com>,
	David Woodhouse <dwmw2@infradead.org>
Subject: Re: Plan for /dev/ioasid RFC v2
Date: Mon, 14 Jun 2021 11:07:11 -0300	[thread overview]
Message-ID: <20210614140711.GI1002214@nvidia.com> (raw)
In-Reply-To: <20210612105711.7ac68c83.alex.williamson@redhat.com>

On Sat, Jun 12, 2021 at 10:57:11AM -0600, Alex Williamson wrote:
> On Fri, 11 Jun 2021 22:28:46 -0300
> Jason Gunthorpe <jgg@nvidia.com> wrote:
> 
> > On Fri, Jun 11, 2021 at 01:38:28PM -0600, Alex Williamson wrote:
> > 
> > > That's fine for a serial port, but not a device that can do DMA.
> > > The entire point of vfio is to try to provide secure, DMA capable
> > > userspace drivers.  If we relax enforcement of that isolation we've
> > > failed.  
> > 
> > I don't understand why the IOASID matters at all in this. Can you
> > explain? What is the breach of isolation?
> 
> I think we're arguing past each other again.  VFIO does not care one
> iota how userspace configures IOASID domains for devices.  OTOH, VFIO
> must be absolutely obsessed that the devices we're providing userspace
> access to are isolated and continue to be isolated for the extent of
> that access.  Given that we define that a group is the smallest set of
> devices that can be isolated, that means that for a device to be
> isolated, the group needs to be isolated.
> 
> VFIO currently has a contract with the IOMMU backend that a group is
> attached to an IOMMU context (container) and from that point forward,
> all devices within that group are known to be isolated.

Sure - and maybe this is the source of the confusion as I've been
assuming we'd change the kernel to match what we are doing. As in the
other note a device under VFIO control should immediately have it's
IOMMU programmed to block all DMA. This is basically attaching it to a
dummy ioasid with an empty page table.

So before VFIO exposes any char device all devices/groups under VFIO
control cannot do any DMA. The only security/isolation harmful action
they can do is DMA to devices in the same group.

> I'm trying to figure out how a device based interface to the IOASID can
> provide that same contract or whether VFIO needs to be able to monitor
> the IOASID attachments of the devices in a group to control whether
> device access is secure.

Can you define what specifically secure, and isolation means?

To my mind it is these three things:

 1. The device can only do DMA to memory put into its security context
 2. No other security context can control this device
 3. No other security context can do DMA to my userspace memory

Today in VFIO the security context is the group fd. I would like the
security context to be the iommu fd.

1 is achieved by ensuring the device is always connected to an
IOASID. Today the group fd requires an IOASID before it hands out a
device_fd. With iommu_fd the device_fd will not allow IOCTLs until it
has a blocked DMA IOASID and is successefully joined to an iommu_fd.

2 is achieved by ensuring that two security contexts can't open
devices in the same group. Today the group fd deals with this by being
single open. With iommu_fd the kenerl would not permit splitting
groups between iommu_fds.

3 is achieved today by the group_fd enforcing a single IOASID on all
devices. Under iommu_fd all devices in the group can use any IOASID in
their iommu_fd security domain.

It is a slightly different model than VFIO uses, but I don't think it
provides less isolation.

> Otherwise, for a device centric VFIO/IOASID model, I need to understand
> exactly when and how VFIO can know that it's safe to provide access to
> a device and how the IOASID model guarantees the ongoing safety of that
> access, which must encompass the safety relative to the entire group.

Lets agree on what safety means then we can evaluate it.

> For example, is it VFIO's job to BIND every device in the group?  

I'm thinking no

> Does binding the device represent the point at which the IOASID
> takes responsibility for the isolation of the device?

Following Kevin's language BIND is when the device_fd and iommu_fd are
connected. That is when I see the device as becoming usable. Whatever
security/isolation requirements we decide should be met here

> If instead it's the ATTACH of a device that provides the isolation,
> how is VFIO supposed to

Not the attach

> DETACH occur through the IOASIDfd rather than the VFIOfd?  It seems
> like the IOASIDfd is going to need ways to manipulate device:IOASID
> mappings outside of VFIO, so again I wonder if we should switch to an
> IOASID uAPI at that point rather than using VFIO.  Thanks,

I don't think so... When the VFIO device_fd is closed it should
disonnect the iommu from its device, restore the blocked DMA
configuration, and then remove itself from the iommu_fd.

Once the device is back to blocked DMA there is no further need for
the iommu_fd to touch it.

Jason
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

  reply	other threads:[~2021-06-14 14:07 UTC|newest]

Thread overview: 162+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-06-07  2:58 Plan for /dev/ioasid RFC v2 Tian, Kevin
2021-06-07  2:58 ` Tian, Kevin
2021-06-09  8:14 ` Eric Auger
2021-06-09  8:14   ` Eric Auger
2021-06-09  9:37   ` Tian, Kevin
2021-06-09  9:37     ` Tian, Kevin
2021-06-09 10:14     ` Eric Auger
2021-06-09 10:14       ` Eric Auger
2021-06-09  9:01 ` Leon Romanovsky
2021-06-09  9:01   ` Leon Romanovsky
2021-06-09  9:43   ` Tian, Kevin
2021-06-09  9:43     ` Tian, Kevin
2021-06-09 12:24 ` Joerg Roedel
2021-06-09 12:24   ` Joerg Roedel
2021-06-09 12:39   ` Jason Gunthorpe
2021-06-09 12:39     ` Jason Gunthorpe
2021-06-09 13:32     ` Joerg Roedel
2021-06-09 13:32       ` Joerg Roedel
2021-06-09 15:00       ` Jason Gunthorpe
2021-06-09 15:00         ` Jason Gunthorpe
2021-06-09 15:51         ` Joerg Roedel
2021-06-09 15:51           ` Joerg Roedel
2021-06-09 16:15           ` Alex Williamson
2021-06-09 16:15             ` Alex Williamson
2021-06-09 16:27             ` Alex Williamson
2021-06-09 16:27               ` Alex Williamson
2021-06-09 18:49               ` Jason Gunthorpe
2021-06-09 18:49                 ` Jason Gunthorpe
2021-06-10 15:38                 ` Alex Williamson
2021-06-10 15:38                   ` Alex Williamson
2021-06-11  0:58                   ` Tian, Kevin
2021-06-11  0:58                     ` Tian, Kevin
2021-06-11 21:38                     ` Alex Williamson
2021-06-11 21:38                       ` Alex Williamson
2021-06-14  3:09                       ` Tian, Kevin
2021-06-14  3:09                         ` Tian, Kevin
2021-06-14  3:22                         ` Alex Williamson
2021-06-14  3:22                           ` Alex Williamson
2021-06-15  1:05                           ` Tian, Kevin
2021-06-15  1:05                             ` Tian, Kevin
2021-06-14 13:38                         ` Jason Gunthorpe
2021-06-14 13:38                           ` Jason Gunthorpe
2021-06-15  1:21                           ` Tian, Kevin
2021-06-15  1:21                             ` Tian, Kevin
2021-06-15 16:56                             ` Alex Williamson
2021-06-15 16:56                               ` Alex Williamson
2021-06-16  6:53                               ` Tian, Kevin
2021-06-16  6:53                                 ` Tian, Kevin
2021-06-24  4:50                             ` David Gibson
2021-06-24  4:50                               ` David Gibson
2021-06-11 16:45                   ` Jason Gunthorpe
2021-06-11 16:45                     ` Jason Gunthorpe
2021-06-11 19:38                     ` Alex Williamson
2021-06-11 19:38                       ` Alex Williamson
2021-06-12  1:28                       ` Jason Gunthorpe
2021-06-12  1:28                         ` Jason Gunthorpe
2021-06-12 16:57                         ` Alex Williamson
2021-06-12 16:57                           ` Alex Williamson
2021-06-14 14:07                           ` Jason Gunthorpe [this message]
2021-06-14 14:07                             ` Jason Gunthorpe
2021-06-14 16:28                             ` Alex Williamson
2021-06-14 16:28                               ` Alex Williamson
2021-06-14 19:40                               ` Jason Gunthorpe
2021-06-14 19:40                                 ` Jason Gunthorpe
2021-06-15  2:31                               ` Tian, Kevin
2021-06-15  2:31                                 ` Tian, Kevin
2021-06-15 16:12                                 ` Alex Williamson
2021-06-15 16:12                                   ` Alex Williamson
2021-06-16  6:43                                   ` Tian, Kevin
2021-06-16  6:43                                     ` Tian, Kevin
2021-06-16 19:39                                     ` Alex Williamson
2021-06-16 19:39                                       ` Alex Williamson
2021-06-17  3:39                                       ` Liu Yi L
2021-06-17  3:39                                         ` Liu Yi L
2021-06-17  7:31                                       ` Tian, Kevin
2021-06-17  7:31                                         ` Tian, Kevin
2021-06-17 21:14                                         ` Alex Williamson
2021-06-17 21:14                                           ` Alex Williamson
2021-06-18  0:19                                           ` Jason Gunthorpe
2021-06-18  0:19                                             ` Jason Gunthorpe
2021-06-18 16:57                                             ` Tian, Kevin
2021-06-18 16:57                                               ` Tian, Kevin
2021-06-18 18:23                                               ` Jason Gunthorpe
2021-06-18 18:23                                                 ` Jason Gunthorpe
2021-06-25 10:27                                                 ` Tian, Kevin
2021-06-25 10:27                                                   ` Tian, Kevin
2021-06-25 14:36                                                   ` Jason Gunthorpe
2021-06-25 14:36                                                     ` Jason Gunthorpe
2021-06-28  1:09                                                     ` Tian, Kevin
2021-06-28  1:09                                                       ` Tian, Kevin
2021-06-28 22:31                                                       ` Alex Williamson
2021-06-28 22:31                                                         ` Alex Williamson
2021-06-28 22:48                                                         ` Jason Gunthorpe
2021-06-28 22:48                                                           ` Jason Gunthorpe
2021-06-28 23:09                                                           ` Alex Williamson
2021-06-28 23:09                                                             ` Alex Williamson
2021-06-28 23:13                                                             ` Jason Gunthorpe
2021-06-28 23:13                                                               ` Jason Gunthorpe
2021-06-29  0:26                                                               ` Tian, Kevin
2021-06-29  0:26                                                                 ` Tian, Kevin
2021-06-29  0:28                                                             ` Tian, Kevin
2021-06-29  0:28                                                               ` Tian, Kevin
2021-06-29  0:43                                                         ` Tian, Kevin
2021-06-29  0:43                                                           ` Tian, Kevin
2021-06-28  2:03                                                     ` Tian, Kevin
2021-06-28  2:03                                                       ` Tian, Kevin
2021-06-28 14:41                                                       ` Jason Gunthorpe
2021-06-28 14:41                                                         ` Jason Gunthorpe
2021-06-28  6:45                                                     ` Tian, Kevin
2021-06-28  6:45                                                       ` Tian, Kevin
2021-06-28 16:26                                                       ` Jason Gunthorpe
2021-06-28 16:26                                                         ` Jason Gunthorpe
2021-06-24  4:26                                               ` David Gibson
2021-06-24  4:26                                                 ` David Gibson
2021-06-24  5:59                                                 ` Tian, Kevin
2021-06-24  5:59                                                   ` Tian, Kevin
2021-06-24 12:22                                                 ` Lu Baolu
2021-06-24 12:22                                                   ` Lu Baolu
2021-06-24  4:23                                           ` David Gibson
2021-06-24  4:23                                             ` David Gibson
2021-06-18  0:52                                         ` Jason Gunthorpe
2021-06-18  0:52                                           ` Jason Gunthorpe
2021-06-18 13:47                                         ` Joerg Roedel
2021-06-18 13:47                                           ` Joerg Roedel
2021-06-18 15:15                                           ` Jason Gunthorpe
2021-06-18 15:15                                             ` Jason Gunthorpe
2021-06-18 15:37                                             ` Raj, Ashok
2021-06-18 15:37                                               ` Raj, Ashok
2021-06-18 15:51                                               ` Alex Williamson
2021-06-18 15:51                                                 ` Alex Williamson
2021-06-24  4:29                                             ` David Gibson
2021-06-24  4:29                                               ` David Gibson
2021-06-24 11:56                                               ` Jason Gunthorpe
2021-06-24 11:56                                                 ` Jason Gunthorpe
2021-06-18  0:10                                   ` Jason Gunthorpe
2021-06-18  0:10                                     ` Jason Gunthorpe
2021-06-17  5:29                     ` David Gibson
2021-06-17  5:29                       ` David Gibson
2021-06-17  5:02             ` David Gibson
2021-06-17  5:02               ` David Gibson
2021-06-17 23:04               ` Jason Gunthorpe
2021-06-17 23:04                 ` Jason Gunthorpe
2021-06-24  4:37                 ` David Gibson
2021-06-24  4:37                   ` David Gibson
2021-06-24 11:57                   ` Jason Gunthorpe
2021-06-24 11:57                     ` Jason Gunthorpe
2021-06-10  5:50     ` Lu Baolu
2021-06-10  5:50       ` Lu Baolu
2021-06-17  5:22       ` David Gibson
2021-06-17  5:22         ` David Gibson
2021-06-18  5:21         ` Lu Baolu
2021-06-18  5:21           ` Lu Baolu
2021-06-24  4:03           ` David Gibson
2021-06-24  4:03             ` David Gibson
2021-06-24 13:42             ` Lu Baolu
2021-06-24 13:42               ` Lu Baolu
2021-06-17  4:45     ` David Gibson
2021-06-17  4:45       ` David Gibson
2021-06-17 23:10       ` Jason Gunthorpe
2021-06-17 23:10         ` Jason Gunthorpe
2021-06-24  4:07         ` David Gibson
2021-06-24  4:07           ` David Gibson

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=20210614140711.GI1002214@nvidia.com \
    --to=jgg@nvidia.com \
    --cc=alex.williamson@redhat.com \
    --cc=ashok.raj@intel.com \
    --cc=baolu.lu@linux.intel.com \
    --cc=corbet@lwn.net \
    --cc=dave.jiang@intel.com \
    --cc=david@gibson.dropbear.id.au \
    --cc=dwmw2@infradead.org \
    --cc=eric.auger@redhat.com \
    --cc=hao.wu@intel.com \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jacob.jun.pan@linux.intel.com \
    --cc=jasowang@redhat.com \
    --cc=jean-philippe@linaro.org \
    --cc=joro@8bytes.org \
    --cc=kevin.tian@intel.com \
    --cc=kvm@vger.kernel.org \
    --cc=kwankhede@nvidia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lkml@metux.net \
    --cc=lushenming@huawei.com \
    --cc=parav@mellanox.com \
    --cc=pbonzini@redhat.com \
    --cc=robin.murphy@arm.com \
    --cc=yi.l.liu@intel.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.