From: Christoph Hellwig <hch@lst.de> To: Robin Murphy <robin.murphy@arm.com> Cc: Joerg Roedel <joro@8bytes.org>, Catalin Marinas <catalin.marinas@arm.com>, Will Deacon <will.deacon@arm.com>, Tom Lendacky <thomas.lendacky@amd.com>, iommu@lists.linux-foundation.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 02/21] arm64/iommu: improve mmap bounds checking Date: Wed, 13 Feb 2019 19:29:01 +0100 [thread overview] Message-ID: <20190213182920.16764-3-hch@lst.de> (raw) In-Reply-To: <20190213182920.16764-1-hch@lst.de> The nr_pages checks should be done for all mmap requests, not just those using remap_pfn_range. Signed-off-by: Christoph Hellwig <hch@lst.de> --- arch/arm64/mm/dma-mapping.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index be88beb2e377..e54288921e72 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -73,19 +73,9 @@ static int __swiotlb_get_sgtable_page(struct sg_table *sgt, static int __swiotlb_mmap_pfn(struct vm_area_struct *vma, unsigned long pfn, size_t size) { - int ret = -ENXIO; - unsigned long nr_vma_pages = vma_pages(vma); - unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT; - unsigned long off = vma->vm_pgoff; - - if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) { - ret = remap_pfn_range(vma, vma->vm_start, - pfn + off, - vma->vm_end - vma->vm_start, - vma->vm_page_prot); - } - - return ret; + return remap_pfn_range(vma, vma->vm_start, pfn + vma->vm_pgoff, + vma->vm_end - vma->vm_start, + vma->vm_page_prot); } #endif /* CONFIG_IOMMU_DMA */ @@ -241,6 +231,8 @@ static int __iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, unsigned long attrs) { + unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT; + unsigned long off = vma->vm_pgoff; struct vm_struct *area; int ret; @@ -249,6 +241,9 @@ static int __iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma, if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret)) return ret; + if (off >= nr_pages || vma_pages(vma) > nr_pages - off) + return -ENXIO; + if (!is_vmalloc_addr(cpu_addr)) { unsigned long pfn = page_to_pfn(virt_to_page(cpu_addr)); return __swiotlb_mmap_pfn(vma, pfn, size); -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de> To: Robin Murphy <robin.murphy@arm.com> Cc: Tom Lendacky <thomas.lendacky@amd.com>, Catalin Marinas <catalin.marinas@arm.com>, Joerg Roedel <joro@8bytes.org>, Will Deacon <will.deacon@arm.com>, linux-kernel@vger.kernel.org, iommu@lists.linux-foundation.org, linux-arm-kernel@lists.infradead.org Subject: [PATCH 02/21] arm64/iommu: improve mmap bounds checking Date: Wed, 13 Feb 2019 19:29:01 +0100 [thread overview] Message-ID: <20190213182920.16764-3-hch@lst.de> (raw) In-Reply-To: <20190213182920.16764-1-hch@lst.de> The nr_pages checks should be done for all mmap requests, not just those using remap_pfn_range. Signed-off-by: Christoph Hellwig <hch@lst.de> --- arch/arm64/mm/dma-mapping.c | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c index be88beb2e377..e54288921e72 100644 --- a/arch/arm64/mm/dma-mapping.c +++ b/arch/arm64/mm/dma-mapping.c @@ -73,19 +73,9 @@ static int __swiotlb_get_sgtable_page(struct sg_table *sgt, static int __swiotlb_mmap_pfn(struct vm_area_struct *vma, unsigned long pfn, size_t size) { - int ret = -ENXIO; - unsigned long nr_vma_pages = vma_pages(vma); - unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT; - unsigned long off = vma->vm_pgoff; - - if (off < nr_pages && nr_vma_pages <= (nr_pages - off)) { - ret = remap_pfn_range(vma, vma->vm_start, - pfn + off, - vma->vm_end - vma->vm_start, - vma->vm_page_prot); - } - - return ret; + return remap_pfn_range(vma, vma->vm_start, pfn + vma->vm_pgoff, + vma->vm_end - vma->vm_start, + vma->vm_page_prot); } #endif /* CONFIG_IOMMU_DMA */ @@ -241,6 +231,8 @@ static int __iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma, void *cpu_addr, dma_addr_t dma_addr, size_t size, unsigned long attrs) { + unsigned long nr_pages = PAGE_ALIGN(size) >> PAGE_SHIFT; + unsigned long off = vma->vm_pgoff; struct vm_struct *area; int ret; @@ -249,6 +241,9 @@ static int __iommu_mmap_attrs(struct device *dev, struct vm_area_struct *vma, if (dma_mmap_from_dev_coherent(dev, vma, cpu_addr, size, &ret)) return ret; + if (off >= nr_pages || vma_pages(vma) > nr_pages - off) + return -ENXIO; + if (!is_vmalloc_addr(cpu_addr)) { unsigned long pfn = page_to_pfn(virt_to_page(cpu_addr)); return __swiotlb_mmap_pfn(vma, pfn, size); -- 2.20.1 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-02-13 18:29 UTC|newest] Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-13 18:28 implement generic dma_map_ops for IOMMUs v2 Christoph Hellwig 2019-02-13 18:28 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 01/21] arm64/iommu: handle non-remapped addresses in ->mmap and ->get_sgtable Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig [this message] 2019-02-13 18:29 ` [PATCH 02/21] arm64/iommu: improve mmap bounds checking Christoph Hellwig 2019-02-13 18:29 ` [PATCH 03/21] dma-mapping: add a Kconfig symbol to indicated arch_dma_prep_coherent presence Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 04/21] dma-iommu: cleanup dma-iommu.h Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 05/21] dma-iommu: remove the flush_page callback Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 06/21] dma-iommu: use for_each_sg in iommu_dma_alloc Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 07/21] dma-iommu: move the arm64 wrappers to common code Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 08/21] dma-iommu: refactor iommu_dma_mmap Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 09/21] dma-iommu: refactor iommu_dma_get_sgtable Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 10/21] dma-iommu: move __iommu_dma_map Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 11/21] dma-iommu: refactor page array remap helpers Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 12/21] dma-iommu: factor atomic pool allocations into helpers Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 13/21] dma-iommu: factor contiguous " Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 14/21] dma-iommu: refactor iommu_dma_free Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 15/21] dma-iommu: don't remap contiguous allocations for coherent devices Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 16/21] dma-iommu: factor contiguous remapped allocations into helpers Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 17/21] dma-iommu: refactor iommu_dma_alloc Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 18/21] dma-iommu: don't depend on CONFIG_DMA_DIRECT_REMAP Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 19/21] dma-iommu: switch copyright boilerplace to SPDX Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 20/21] arm64: switch copyright boilerplace to SPDX in dma-mapping.c Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-02-13 18:29 ` [PATCH 21/21] arm64: trim includes " Christoph Hellwig 2019-02-13 18:29 ` Christoph Hellwig 2019-03-27 8:04 implement generic dma_map_ops for IOMMUs v2 [rebase + resend] Christoph Hellwig 2019-03-27 8:04 ` [PATCH 02/21] arm64/iommu: improve mmap bounds checking Christoph Hellwig 2019-03-27 8:04 ` Christoph Hellwig 2019-04-05 17:30 ` Robin Murphy 2019-04-05 17:30 ` Robin Murphy 2019-04-05 17:30 ` Robin Murphy 2019-04-07 6:59 ` Christoph Hellwig 2019-04-07 6:59 ` Christoph Hellwig 2019-04-07 6:59 ` Christoph Hellwig 2019-04-09 15:12 ` Robin Murphy 2019-04-09 15:12 ` Robin Murphy 2019-04-09 15:12 ` Robin Murphy 2019-04-09 17:09 ` Christoph Hellwig 2019-04-09 17:09 ` Christoph Hellwig 2019-04-09 17:09 ` 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=20190213182920.16764-3-hch@lst.de \ --to=hch@lst.de \ --cc=catalin.marinas@arm.com \ --cc=iommu@lists.linux-foundation.org \ --cc=joro@8bytes.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=robin.murphy@arm.com \ --cc=thomas.lendacky@amd.com \ --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: linkBe 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.