Thread (55 messages) 55 messages, 7 authors, 2021-09-27

Re: [PATCH v4 11/15] pci: Add pci_iomap_shared{,_range}

From: "Michael S. Tsirkin" <mst@redhat.com>
Date: 2021-08-24 09:47:20
Also in: linux-arch, linux-doc, linux-mips, linux-pci, lkml, sparclinux, virtualization

On Mon, Aug 23, 2021 at 07:14:18PM -0700, Andi Kleen wrote:
On 8/23/2021 6:04 PM, Dan Williams wrote:
quoted
On Mon, Aug 23, 2021 at 5:31 PM Kuppuswamy, Sathyanarayanan
[off-list ref] wrote:
quoted

On 8/23/21 4:56 PM, Michael S. Tsirkin wrote:
quoted
quoted
Add a new variant of pci_iomap for mapping all PCI resources
of a devices as shared memory with a hypervisor in a confidential
guest.

Signed-off-by: Andi Kleen<redacted>
Signed-off-by: Kuppuswamy Sathyanarayanan<sathyanarayanan.kuppuswamy@linux.intel.com>
I'm a bit puzzled by this part. So why should the guest*not*  map
pci memory as shared? And if the answer is never (as it seems to be)
then why not just make regular pci_iomap DTRT?
It is in the context of confidential guest (where VMM is un-trusted). So
we don't want to make all PCI resource as shared. It should be allowed
only for hardened drivers/devices.
That's confusing, isn't device authorization what keeps unaudited
drivers from loading against untrusted devices? I'm feeling like
Michael that this should be a detail that drivers need not care about
explicitly, in which case it does not need to be exported because the
detail can be buried in lower levels.
We originally made it default (similar to AMD), but it during code audit we
found a lot of drivers who do ioremap early outside the probe function.
Since it would be difficult to change them all we made it opt-in, which
ensures that only drivers that have been enabled can talk with the host at
all and can't be attacked. That made the problem of hardening all these
drivers a lot more practical.

Currently we only really need virtio and MSI-X shared, so for changing two
places in the tree you avoid a lot of headache elsewhere.

Note there is still a command line option to override if you want to allow
and load other drivers.

-Andi
I see. Hmm. It's a bit of a random thing to do it at the map time
though. E.g. DMA is all handled transparently behind the DMA API.
Hardening is much more than just replacing map with map_shared
and I suspect what you will end up with is basically
vendors replacing map with map shared to make things work
for their users and washing their hands.

I would say an explicit flag in the driver that says "hardened"
and refusing to init a non hardened one would be better.

-- 
MST
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help