From: Lu Baolu <baolu.lu@linux.intel.com>
To: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: baolu.lu@linux.intel.com, David Woodhouse <dwmw2@infradead.org>,
Joerg Roedel <joro@8bytes.org>,
Bjorn Helgaas <bhelgaas@google.com>,
Christoph Hellwig <hch@lst.de>,
ashok.raj@intel.com, jacob.jun.pan@intel.com, alan.cox@intel.com,
kevin.tian@intel.com, mika.westerberg@linux.intel.com,
Ingo Molnar <mingo@redhat.com>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
pengfei.xu@intel.com, Marek Szyprowski <m.szyprowski@samsung.com>,
Robin Murphy <robin.murphy@arm.com>,
Jonathan Corbet <corbet@lwn.net>,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Juergen Gross <jgross@suse.com>,
Stefano Stabellini <sstabellini@kernel.org>,
Steven Rostedt <rostedt@goodmis.org>,
iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v4 0/9] iommu: Bounce page for untrusted devices
Date: Wed, 12 Jun 2019 11:00:06 +0800 [thread overview]
Message-ID: <cd66dab1-9a18-13c1-e668-417036e2dbc1@linux.intel.com> (raw)
In-Reply-To: <20190610154241.GS28796@char.us.oracle.com>
Hi,
On 6/10/19 11:42 PM, Konrad Rzeszutek Wilk wrote:
> On Mon, Jun 03, 2019 at 09:16:11AM +0800, Lu Baolu wrote:
>> The Thunderbolt vulnerabilities are public and have a nice
>> name as Thunderclap [1] [3] nowadays. This patch series aims
>> to mitigate those concerns.
>>
>> An external PCI device is a PCI peripheral device connected
>> to the system through an external bus, such as Thunderbolt.
>> What makes it different is that it can't be trusted to the
>> same degree as the devices build into the system. Generally,
>> a trusted PCIe device will DMA into the designated buffers
>> and not overrun or otherwise write outside the specified
>> bounds. But it's different for an external device.
>>
>> The minimum IOMMU mapping granularity is one page (4k), so
>> for DMA transfers smaller than that a malicious PCIe device
>> can access the whole page of memory even if it does not
>> belong to the driver in question. This opens a possibility
>> for DMA attack. For more information about DMA attacks
>> imposed by an untrusted PCI/PCIe device, please refer to [2].
>>
>> This implements bounce buffer for the untrusted external
>> devices. The transfers should be limited in isolated pages
>> so the IOMMU window does not cover memory outside of what
>> the driver expects. Previously (v3 and before), we proposed
>> an optimisation to only copy the head and tail of the buffer
>> if it spans multiple pages, and directly map the ones in the
>> middle. Figure 1 gives a big picture about this solution.
>>
>> swiotlb System
>> IOVA bounce page Memory
>> .---------. .---------. .---------.
>> | | | | | |
>> | | | | | |
>> buffer_start .---------. .---------. .---------.
>> | |----->| |*******>| |
>> | | | | swiotlb| |
>> | | | | mapping| |
>> IOMMU Page '---------' '---------' '---------'
>> Boundary | | | |
>> | | | |
>> | | | |
>> | |------------------------>| |
>> | | IOMMU mapping | |
>> | | | |
>> IOMMU Page .---------. .---------.
>> Boundary | | | |
>> | | | |
>> | |------------------------>| |
>> | | IOMMU mapping | |
>> | | | |
>> | | | |
>> IOMMU Page .---------. .---------. .---------.
>> Boundary | | | | | |
>> | | | | | |
>> | |----->| |*******>| |
>> buffer_end '---------' '---------' swiotlb'---------'
>> | | | | mapping| |
>> | | | | | |
>> '---------' '---------' '---------'
>> Figure 1: A big view of iommu bounce page
>>
>> As Robin Murphy pointed out, this ties us to using strict mode for
>> TLB maintenance, which may not be an overall win depending on the
>> balance between invalidation bandwidth vs. memcpy bandwidth. If we
>> use standard SWIOTLB logic to always copy the whole thing, we should
>> be able to release the bounce pages via the flush queue to allow
>> 'safe' lazy unmaps. So since v4 we start to use the standard swiotlb
>> logic.
>>
>> swiotlb System
>> IOVA bounce page Memory
>> buffer_start .---------. .---------. .---------.
>> | | | | | |
>> | | | | | |
>> | | | | .---------.physical
>> | |----->| | ------>| |_start
>> | |iommu | | swiotlb| |
>> | | map | | map | |
>> IOMMU Page .---------. .---------. '---------'
>
> The prior picture had 'buffer_start' at an offset in the page. I am
> assuming you meant that here in as well?
In prior picture, since we only use bounce buffer for head and tail
partial-page buffers, so we need to return buffer_start at the same
offset as the physical buffer.
Here, we use a whole swiotlb bounce buffer, hence we should use the same
offset as the bounce buffer (a.k.a. offset = 0).
>
> Meaning it starts at the same offset as 'physical_start' in the right
> side box?
>
>> Boundary | | | | | |
>> | | | | | |
>> | |----->| | | |
>> | |iommu | | | |
>> | | map | | | |
>> | | | | | |
>> IOMMU Page .---------. .---------. .---------.
>> Boundary | | | | | |
>> | |----->| | | |
>> | |iommu | | | |
>> | | map | | | |
>> | | | | | |
>> IOMMU Page | | | | | |
>> Boundary .---------. .---------. .---------.
>> | | | |------->| |
>> buffer_end '---------' '---------' swiotlb| |
>> | |----->| | map | |
>> | |iommu | | | |
>> | | map | | '---------' physical
>> | | | | | | _end
>> '---------' '---------' '---------'
>> Figure 2: A big view of simplified iommu bounce page
>>
>> The implementation of bounce buffers for untrusted devices
>> will cause a little performance overhead, but we didn't see
>> any user experience problems. The users could use the kernel
>
> What kind of devices did you test it with?
Most test work was done by Xu Pengfei (cc'ed). He has run the code
on real platforms with various thunderbolt peripherals (usb, disk,
network, etc.).
>
> Thank you for making this awesome cover letter btw!
>
You are welcome.
Best regards,
Baolu
next prev parent reply other threads:[~2019-06-12 3:07 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-06-03 1:16 [PATCH v4 0/9] iommu: Bounce page for untrusted devices Lu Baolu
2019-06-03 1:16 ` [PATCH v4 1/9] PCI: Add dev_is_untrusted helper Lu Baolu
2019-06-03 1:16 ` [PATCH v4 2/9] swiotlb: Split size parameter to map/unmap APIs Lu Baolu
2019-06-03 1:16 ` [PATCH v4 3/9] swiotlb: Zero out bounce buffer for untrusted device Lu Baolu
2019-06-10 15:45 ` Konrad Rzeszutek Wilk
2019-06-12 0:43 ` Lu Baolu
2019-06-12 1:05 ` Konrad Rzeszutek Wilk
2019-06-12 3:08 ` Lu Baolu
2019-06-03 1:16 ` [PATCH v4 4/9] iommu: Add bounce page APIs Lu Baolu
2019-06-10 15:56 ` Konrad Rzeszutek Wilk
2019-06-12 0:45 ` Lu Baolu
2019-06-11 12:10 ` Pavel Begunkov
2019-06-12 0:52 ` Lu Baolu
2019-06-03 1:16 ` [PATCH v4 5/9] iommu/vt-d: Don't switch off swiotlb if use direct dma Lu Baolu
2019-06-10 15:54 ` Konrad Rzeszutek Wilk
2019-06-12 2:03 ` Lu Baolu
2019-06-03 1:16 ` [PATCH v4 6/9] iommu/vt-d: Check whether device requires bounce buffer Lu Baolu
2019-06-10 16:08 ` Konrad Rzeszutek Wilk
2019-06-12 2:22 ` Lu Baolu
2019-06-03 1:16 ` [PATCH v4 7/9] iommu/vt-d: Add trace events for domain map/unmap Lu Baolu
2019-06-04 9:01 ` Steven Rostedt
2019-06-05 6:48 ` Lu Baolu
2019-06-10 16:08 ` Konrad Rzeszutek Wilk
2019-06-12 2:31 ` Lu Baolu
2019-06-03 1:16 ` [PATCH v4 8/9] iommu/vt-d: Code refactoring for bounce map and unmap Lu Baolu
2019-06-03 1:16 ` [PATCH v4 9/9] iommu/vt-d: Use bounce buffer for untrusted devices Lu Baolu
2019-06-10 15:42 ` [PATCH v4 0/9] iommu: Bounce page " Konrad Rzeszutek Wilk
2019-06-12 3:00 ` Lu Baolu [this message]
2019-06-12 6:22 ` Mika Westerberg
2019-06-10 16:10 ` Konrad Rzeszutek Wilk
2019-06-12 3:04 ` Lu Baolu
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=cd66dab1-9a18-13c1-e668-417036e2dbc1@linux.intel.com \
--to=baolu.lu@linux.intel.com \
--cc=alan.cox@intel.com \
--cc=ashok.raj@intel.com \
--cc=bhelgaas@google.com \
--cc=boris.ostrovsky@oracle.com \
--cc=corbet@lwn.net \
--cc=dwmw2@infradead.org \
--cc=gregkh@linuxfoundation.org \
--cc=hch@lst.de \
--cc=iommu@lists.linux-foundation.org \
--cc=jacob.jun.pan@intel.com \
--cc=jgross@suse.com \
--cc=joro@8bytes.org \
--cc=kevin.tian@intel.com \
--cc=konrad.wilk@oracle.com \
--cc=linux-kernel@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=mika.westerberg@linux.intel.com \
--cc=mingo@redhat.com \
--cc=pengfei.xu@intel.com \
--cc=robin.murphy@arm.com \
--cc=rostedt@goodmis.org \
--cc=sstabellini@kernel.org \
/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