On Thu, Oct 08, 2015 at 12:19:20PM +0300, Avi Kivity wrote:
No. uio_pci_generic currently can be used in a secure way in
On 10/08/2015 11:32 AM, Michael S. Tsirkin wrote:
On Thu, Oct 08, 2015 at 08:33:45AM +0300, Avi Kivity wrote:The word security has several meanings. The primary meaning is "defense
On 08/10/15 00:05, Michael S. Tsirkin wrote:And I'm sorry about the frustration. I didn't intend to twist your
On Wed, Oct 07, 2015 at 07:39:16PM +0300, Avi Kivity wrote:You simply ignore everything I write, cherry-picking the word "insecure" as
That's what I thought as well, but apparently adding msix support to theI'm glad you finally agree what these drivers are doing is insecure.
already insecure uio drivers is even worse.
And basically kernel cares about security, no one wants to maintain insecure stuff.
So you guys should think harder whether this code makes any sense upstream.
if it makes your point. That is very frustrating.
words. It's just that I had to spend literally hours trying to explain
that security matters in kernel, and all I was getting back was a
summary "there's no security issue because there are other way to
corrupt memory".
against a malicious attacker". In that sense, there is no added value at
all, because the attacker is already root, and can already access all of
kernel and user memory. Even if the attacker is not root, and just has
access to a non-iommu-protected device, they can still DMA to and from any
memory they like.
This sense of the word however is irrelevant for this conversation; the user
already gave up on it when they chose to use uio_pci_generic (either because
they have no iommu, or because they need the extra performance).
Do we agree that security, in the sense of defense against a malicious
attacker, is irrelevant for this conversation?
a sense that it's protected againt malicious attacker,
assuming you bind it to a device that does not do DMA.
A secondary meaning is protection against inadvertent bugs. Yes, a faultyhttp://mid.gmane.org/20151006005527-mutt-send-email-mst@xxxxxxxxxx
memory write that happens to land in the msix page, can cause a random
memory word to be overwritten. But so can a faulty memory write into the
rings, or the data structures that support virtual->physical translation,
the data structures that describe the packets before translation, the memory
allocator or pool. The patch extends the vulnerable surface, but by a
negligible amount.
So I was glad when it looked like there's finally an agreement that yes,
there's value in validating userspace input and yes, it's insecure
not to do this.
>from harder to implement with more overhead but more secure to easier toIt is good practice to defend against root oopsing the kernel, but in someI originally included ways to fix issues that I pointed out, ranging
cases it cannot be achieved.
implement with less overhead but less secure. There didn't seem to beI don't recall this being mentioned at all.
an understanding that the issues are there at all, so I stopped doing
that - seemed like a waste of time.
For example, will it kill your performance to reset devices cleanly, on
open and close,
But really, this is just off the top of my head.
These are all issues VFIO developers encountered
and fixed over the years. Go into that code, read it,
and you will discover the issues and the solutions.
It seems completely unrelatedIt isn't unrelated. It's because with MSIX patch you are enabling bus
to a patch adding msix support to uio_pci_generic.
mastering in kernel. So if you start device in a bad state it will
corrupt kernel memory.
If you don't, moving BARs will move the MSI-X region andprotect them from writes into MSI config, BAR registersObviously the userspace driver has to write to the BAR area.
and related capablities etc etc?
If you're talking about the BAR setup registers, yes there is some (tiny)
value in that, but how is it related to this patch?
protecting it won't help.
Protecting the MSI area in the BARs _is_ related to the patch. I agree itI don't see them as unrelated. Basically you want to turn
adds value, if small.
And if not, why are you people wastingI you want to use your position as maintainer of uio_pci_generic to get
time arguing about that?
people to overhaul the driver for you with unrelated changes, they will
object. I can understand a maintainer pointing out the right way to do
something rather than the wrong way. But piling on a list of unrelated
features as prerequisites is, in my opinion, abuse.
uio_pci_generic into vfio/pci except without an IOMMU.
You will need a
lot of VFIO code then. That will need a lot of work. You seem to blame
me for this but IMHO that's because patch author has chosen a wrong
approach.
Let me repeat that pci_uio_generic is already used for userspace drivers,I answered this already. I don't agree with this.
with all the issues that you point out, for a long while now. These issues
are not exposed by the requirement to use msix.
You are not protecting theBecause it's either this patch or nothing at all? I don't believe that.
kernel in any way by blocking the patch, you are only protecting people with
iommu-less configurations from using their hardware.
Someone come along and write a better one.
And some are using it in very broken ways. Yes. But now you wantThe only thing I heard is that it's a hassle.My thinking was that vfio was for secure (in the "defense against malicious
That's true (though if you follow my advice and try to share code with
vfio/pci you get a lot of this logic for free).
attackers" sense) while uio_pci_generic was, de-facto at least, for use by
trusted users.
to fix this in stone by tying a kernel/userspace interface
to their broken ways. I think that would be a mistake.
We are in the strange situation that the Alex is open to adding an insecureI don't find this strange. It seems to make sense. VFIO is
mode to vfio,
already used with DMA capable devices.
while you object to a patch which does not change the securityI don't agree with this either. This depends on the device.
of uio_pci_generic in any way; it only makes it more usable at the cost of a
tiny increase in the bug surface.
It doesn't. sysfs does.So it's anIt is not more or less a hack than uio_pci_generic allowing DMA,
understandable argument if you just need something that works, quickly.
But if it's such a stopgap hack, there's no need to insist on it
upstream.
orThere's no need to prevent MSIX with or without DMA.
/dev/mem, or the module loading interface, or nommu kernels. Security is
just one aspect of the kernel, not the only one.
It's perfectly reasonable to taint the kernel when insecure DMA is enabled,
and to allow the administrator to disable the interface completely. What I
don't understand is why, given that the user allows DMA, we should prevent
them from using MSIX in addition.
But UIO uses sysfs for device access. So if we program MSIX we need to
extend sysfs to protect a ton of registers that are MSIX related from
the user, and do a bunch of setup and cleanup otherwise kernel will be
very confused.
It might be surprising to you how many registers are MSIX related,
but it's true.