linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: "Michael S. Tsirkin" <mst@redhat.com>
To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Christoph Hellwig <hch@infradead.org>,
	Will Deacon <will.deacon@arm.com>,
	Anshuman Khandual <khandual@linux.vnet.ibm.com>,
	virtualization@lists.linux-foundation.org,
	linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org,
	aik@ozlabs.ru, robh@kernel.org, joe@perches.com,
	elfring@users.sourceforge.net, david@gibson.dropbear.id.au,
	jasowang@redhat.com, mpe@ellerman.id.au, linuxram@us.ibm.com,
	haren@linux.vnet.ibm.com, paulus@samba.org,
	srikar@linux.vnet.ibm.com, robin.murphy@arm.com,
	jean-philippe.brucker@arm.com, marc.zyngier@arm.com
Subject: Re: [RFC 0/4] Virtio uses DMA API for all devices
Date: Mon, 6 Aug 2018 16:46:40 +0300	[thread overview]
Message-ID: <20180806164106-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <fd8fee94cf42e436878f179c7895de3a4dab3355.camel@kernel.crashing.org>

On Sun, Aug 05, 2018 at 02:52:54PM +1000, Benjamin Herrenschmidt wrote:
> On Sun, 2018-08-05 at 03:22 +0300, Michael S. Tsirkin wrote:
> > I see the allure of this, but I think down the road you will
> > discover passing a flag in libvirt XML saying
> > "please use a secure mode" or whatever is a good idea.
> > 
> > Even thought it is probably not required to address this
> > specific issue.
> > 
> > For example, I don't think ballooning works in secure mode,
> > you will be able to teach libvirt not to try to add a
> > balloon to the guest.
> 
> Right, we'll need some quirk to disable balloons  in the guest I
> suppose.
> 
> Passing something from libvirt is cumbersome because the end user may
> not even need to know about secure VMs. There are use cases where the
> security is a contract down to some special application running inside
> the secure VM, the sysadmin knows nothing about.
> 
> Also there's repercussions all the way to admin tools, web UIs etc...
> so it's fairly wide ranging.
> 
> So as long as we only need to quirk a couple of devices, it's much
> better contained that way.

So just the balloon thing already means that yes management and all the
way to the user tools must know this is going on. Otherwise
user will try to inflate the balloon and wonder why this does not work.

> > > Later on, (we may have even already run Linux at that point,
> > > unsecurely, as we can use Linux as a bootloader under some
> > > circumstances), we start a "secure image".
> > > 
> > > This is a kernel zImage that includes a "ticket" that has the
> > > appropriate signature etc... so that when that kernel starts, it can
> > > authenticate with the ultravisor, be verified (along with its ramdisk)
> > > etc... and copied (by the UV) into secure memory & run from there.
> > > 
> > > At that point, the hypervisor is informed that the VM has become
> > > secure.
> > > 
> > > So at that point, we could exit to qemu to inform it of the change,
> > 
> > That's probably a good idea too.
> 
> We probably will have to tell qemu eventually for migration, as we'll
> need some kind of key exchange phase etc... to deal with the crypto
> aspects (the actual page copy is sorted via encrypting the secure pages
> back to normal pages in qemu, but we'll need extra metadata).
> 
> > > and
> > > have it walk the qtree and "Switch" all the virtio devices to use the
> > > IOMMU I suppose, but it feels a lot grosser to me.
> > 
> > That part feels gross, yes.
> > 
> > > That's the only other option I can think of.
> > > 
> > > > However in this specific case, the flag does not need to come from the
> > > > hypervisor, it can be set by arch boot code I think.
> > > > Christoph do you see a problem with that?
> > > 
> > > The above could do that yes. Another approach would be to do it from a
> > > small virtio "quirk" that pokes a bit in the device to force it to
> > > iommu mode when it detects that we are running in a secure VM. That's a
> > > bit warty on the virito side but probably not as much as having a qemu
> > > one that walks of the virtio devices to change how they behave.
> > > 
> > > What do you reckon ?
> > 
> > I think you are right that for the dma limit the hypervisor doesn't seem
> > to need to know.
> 
> It's not just a limit mind you. It's a range, at least if we allocate
> just a single pool of insecure pages. swiotlb feels like a better
> option for us.
> 
> > > What we want to avoid is to expose any of this to the *end user* or
> > > libvirt or any other higher level of the management stack. We really
> > > want that stuff to remain contained between the VM itself, KVM and
> > > maybe qemu.
> > > 
> > > We will need some other qemu changes for migration so that's ok. But
> > > the minute you start touching libvirt and the higher levels it becomes
> > > a nightmare.
> > > 
> > > Cheers,
> > > Ben.
> > 
> > I don't believe you'll be able to avoid that entirely. The split between
> > libvirt and qemu is more about community than about code, random bits of
> > functionality tend to land on random sides of that fence.  Better add a
> > tag in domain XML early is my advice. Having said that, it's your
> > hypervisor. I'm just suggesting that when hypervisor does somehow need
> > to care then I suspect most people won't be receptive to the argument
> > that changing libvirt is a nightmare.
> 
> It only needs to care at runtime. The problem isn't changing libvirt
> per-se, I don't have a problem with that. The problem is that it means
> creating two categories of machines "secure" and "non-secure", which is
> end-user visible, and thus has to be escalated to all the various
> management stacks, UIs, etc... out there.
> 
> In addition, there are some cases where the individual creating the VMs
> may not have any idea that they are secure.
> 
> But yes, if we have to, we'll do it. However, so far, we don't think
> it's a great idea.
> 
> Cheers,
> Ben.

Here's another example: you can't migrate a secure vm to hypervisor
which doesn't support this feature. Again management tools above libvirt
need to know otherwise they will try.

> > > > > >   To get swiotlb you'll need to then use the DT/ACPI
> > > > > > dma-range property to limit the addressable range, and a swiotlb
> > > > > > capable plaform will use swiotlb automatically.
> > > > > 
> > > > > This cannot be done as you describe it.
> > > > > 
> > > > > The VM is created as a *normal* VM. The DT stuff is generated by qemu
> > > > > at a point where it has *no idea* that the VM will later become secure
> > > > > and thus will have to restrict which pages can be used for "DMA".
> > > > > 
> > > > > The VM will *at runtime* turn itself into a secure VM via interactions
> > > > > with the security HW and the Ultravisor layer (which sits below the
> > > > > HV). This happens way after the DT has been created and consumed, the
> > > > > qemu devices instanciated etc...
> > > > > 
> > > > > Only the guest kernel knows because it initates the transition. When
> > > > > that happens, the virtio devices have already been used by the guest
> > > > > firmware, bootloader, possibly another kernel that kexeced the "secure"
> > > > > one, etc... 
> > > > > 
> > > > > So instead of running around saying NAK NAK NAK, please explain how we
> > > > > can solve that differently.
> > > > > 
> > > > > Ben.

  reply	other threads:[~2018-08-06 13:46 UTC|newest]

Thread overview: 119+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-20  3:59 [RFC 0/4] Virtio uses DMA API for all devices Anshuman Khandual
2018-07-20  3:59 ` [RFC 1/4] virtio: Define virtio_direct_dma_ops structure Anshuman Khandual
2018-07-30  9:24   ` Christoph Hellwig
2018-07-31  4:01     ` Anshuman Khandual
2018-07-20  3:59 ` [RFC 2/4] virtio: Override device's DMA OPS with virtio_direct_dma_ops selectively Anshuman Khandual
2018-07-28  8:56   ` Anshuman Khandual
2018-07-28 21:16     ` Michael S. Tsirkin
2018-07-30  4:15       ` Anshuman Khandual
2018-07-30  9:30       ` Christoph Hellwig
2018-07-31  6:39         ` Anshuman Khandual
2018-07-30  9:25   ` Christoph Hellwig
2018-07-31  7:00     ` Anshuman Khandual
2018-07-20  3:59 ` [RFC 3/4] virtio: Force virtio core to use DMA API callbacks for all virtio devices Anshuman Khandual
2018-07-20  3:59 ` [RFC 4/4] virtio: Add platform specific DMA API translation for virito devices Anshuman Khandual
2018-07-20 13:15   ` Michael S. Tsirkin
2018-07-23  2:16     ` Anshuman Khandual
2018-07-25  4:30       ` Anshuman Khandual
2018-07-25 13:31       ` Michael S. Tsirkin
2018-07-20 13:16 ` [RFC 0/4] Virtio uses DMA API for all devices Michael S. Tsirkin
2018-07-23  6:28   ` Anshuman Khandual
2018-07-23  9:08     ` Michael S. Tsirkin
2018-07-25  3:26       ` Anshuman Khandual
2018-07-27 11:31         ` Michael S. Tsirkin
2018-07-28  8:37           ` Anshuman Khandual
2018-07-27  9:58 ` Will Deacon
2018-07-27 10:58   ` Anshuman Khandual
2018-07-30  9:34   ` Christoph Hellwig
2018-07-30 10:28     ` Michael S. Tsirkin
2018-07-30 11:18       ` Christoph Hellwig
2018-07-30 13:26         ` Michael S. Tsirkin
2018-07-31 17:30           ` Christoph Hellwig
2018-07-31 20:36             ` Benjamin Herrenschmidt
2018-08-01  8:16               ` Will Deacon
2018-08-01  8:36                 ` Christoph Hellwig
2018-08-01  9:05                   ` Will Deacon
2018-08-01 22:41                     ` Michael S. Tsirkin
2018-08-01 22:35                   ` Michael S. Tsirkin
2018-08-02 15:24                   ` Benjamin Herrenschmidt
2018-08-02 15:41                     ` Michael S. Tsirkin
2018-08-02 16:01                       ` Benjamin Herrenschmidt
2018-08-02 17:19                         ` Michael S. Tsirkin
2018-08-02 17:53                           ` Benjamin Herrenschmidt
2018-08-02 20:52                             ` Michael S. Tsirkin
2018-08-02 21:13                               ` Benjamin Herrenschmidt
2018-08-02 21:51                                 ` Michael S. Tsirkin
2018-08-03  7:05                                 ` Christoph Hellwig
2018-08-03 15:58                                   ` Benjamin Herrenschmidt
2018-08-03 16:02                                     ` Christoph Hellwig
2018-08-03 18:58                                       ` Benjamin Herrenschmidt
2018-08-04  8:21                                         ` Christoph Hellwig
2018-08-05  1:10                                           ` Benjamin Herrenschmidt
2018-08-05  7:29                                             ` Christoph Hellwig
2018-08-05 21:16                                               ` Benjamin Herrenschmidt
2018-08-05 21:30                                                 ` Benjamin Herrenschmidt
2018-08-06  9:42                                                 ` Christoph Hellwig
2018-08-06 19:52                                                   ` Benjamin Herrenschmidt
2018-08-07  6:21                                                     ` Christoph Hellwig
2018-08-07  6:42                                                       ` Benjamin Herrenschmidt
2018-08-07 13:55                                                         ` Christoph Hellwig
2018-08-07 20:32                                                           ` Benjamin Herrenschmidt
2018-08-08  6:31                                                             ` Christoph Hellwig
2018-08-08 10:07                                                               ` Benjamin Herrenschmidt
2018-08-08 12:30                                                                 ` Christoph Hellwig
2018-08-08 13:18                                                                   ` Benjamin Herrenschmidt
2018-08-08 20:31                                                                     ` Michael S. Tsirkin
2018-08-08 22:13                                                                       ` Benjamin Herrenschmidt
2018-08-09  2:00                                                                         ` Benjamin Herrenschmidt
2018-08-09  5:40                                                                         ` Christoph Hellwig
2018-09-07  0:09                                                                           ` Jiandi An
2018-09-10  6:19                                                                             ` Christoph Hellwig
2018-09-10  8:53                                                                               ` Gerd Hoffmann
2018-08-03 19:07                                     ` Michael S. Tsirkin
2018-08-04  1:11                                       ` Benjamin Herrenschmidt
2018-08-04  1:16                                       ` Benjamin Herrenschmidt
2018-08-05  0:22                                         ` Michael S. Tsirkin
2018-08-05  4:52                                           ` Benjamin Herrenschmidt
2018-08-06 13:46                                             ` Michael S. Tsirkin [this message]
2018-08-06 19:56                                               ` Benjamin Herrenschmidt
2018-08-06 20:35                                                 ` Michael S. Tsirkin
2018-08-06 21:26                                                   ` Benjamin Herrenschmidt
2018-08-06 21:46                                                     ` Michael S. Tsirkin
2018-08-06 22:13                                                       ` Benjamin Herrenschmidt
2018-08-06 23:16                                                         ` Benjamin Herrenschmidt
2018-08-06 23:45                                                         ` Michael S. Tsirkin
2018-08-07  0:18                                                           ` Benjamin Herrenschmidt
2018-08-07  6:32                                                           ` Christoph Hellwig
2018-08-07  6:27                                                         ` Christoph Hellwig
2018-08-07  6:44                                                           ` Benjamin Herrenschmidt
2018-08-07  6:18                                                       ` Christoph Hellwig
2018-08-07  6:16                                                     ` Christoph Hellwig
2018-08-06 23:18                                                   ` Benjamin Herrenschmidt
2018-08-07  6:12                                                   ` Christoph Hellwig
2018-08-04  1:18                                       ` Benjamin Herrenschmidt
2018-08-04  1:22                                       ` Benjamin Herrenschmidt
2018-08-05  0:23                                         ` Michael S. Tsirkin
2018-08-03 19:17                                   ` Michael S. Tsirkin
2018-08-04  8:15                                     ` Christoph Hellwig
2018-08-05  0:09                                       ` Michael S. Tsirkin
2018-08-05  1:11                                         ` Benjamin Herrenschmidt
2018-08-05  7:25                                         ` Christoph Hellwig
2018-08-05  0:53                                       ` Benjamin Herrenschmidt
2018-08-05  0:27                 ` Michael S. Tsirkin
2018-08-06 14:05                   ` Will Deacon
2018-08-01 21:56               ` Michael S. Tsirkin
2018-08-02 15:33                 ` Benjamin Herrenschmidt
2018-08-02 20:53                   ` Michael S. Tsirkin
2018-08-03  7:06                     ` Christoph Hellwig
2018-08-02 20:55 ` Michael S. Tsirkin
2018-08-03  2:41   ` Jason Wang
2018-08-03 19:08     ` Michael S. Tsirkin
2018-08-04  1:21       ` Benjamin Herrenschmidt
2018-08-05  0:24         ` Michael S. Tsirkin
2018-08-06  9:02           ` Anshuman Khandual
2018-08-06 13:36             ` Michael S. Tsirkin
2018-08-06 15:24               ` Christoph Hellwig
2018-08-06 16:06                 ` Michael S. Tsirkin
2018-08-06 16:10                   ` Christoph Hellwig
2018-08-06 16:13                     ` Michael S. Tsirkin
2018-08-06 16:34                       ` Christoph Hellwig

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=20180806164106-mutt-send-email-mst@kernel.org \
    --to=mst@redhat.com \
    --cc=aik@ozlabs.ru \
    --cc=benh@kernel.crashing.org \
    --cc=david@gibson.dropbear.id.au \
    --cc=elfring@users.sourceforge.net \
    --cc=haren@linux.vnet.ibm.com \
    --cc=hch@infradead.org \
    --cc=jasowang@redhat.com \
    --cc=jean-philippe.brucker@arm.com \
    --cc=joe@perches.com \
    --cc=khandual@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=linuxram@us.ibm.com \
    --cc=marc.zyngier@arm.com \
    --cc=mpe@ellerman.id.au \
    --cc=paulus@samba.org \
    --cc=robh@kernel.org \
    --cc=robin.murphy@arm.com \
    --cc=srikar@linux.vnet.ibm.com \
    --cc=virtualization@lists.linux-foundation.org \
    --cc=will.deacon@arm.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 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).