[3.19.y-ckt stable] Patch "arm64: add missing PAGE_ALIGN() to __dma_free()" has been added to staging queue

Dean Nelson dnelson at redhat.com
Thu May 28 12:14:59 UTC 2015


On 05/25/2015 10:45 AM, Luis Henriques wrote:
> On Thu, May 21, 2015 at 06:25:20PM -0500, Dean Nelson wrote:
> ...
>
>>> If you, or anyone else, feels it should not be added to this tree, please
>>> reply to this email.
>>
>> The commit 2cff98b99c469880ce830 was only appropriate for backporting
>> to linux-4.0.y. A different patch is required for linux-3.19.y, which
>> I have attached.
>>
>> The attached patch will work as is for 3.19.y and 3.18.y. A slightly
>> modified version of it is needed for 3.17.y through 3.15.y.
>>
>
> Great, thanks for clarifying.  In inlining a backport for the 3.16
> kernel.  Apparently, it's just a matter of adjusting context, or am I
> missing something else?

Nope, you're not missing a thing. Your inlined patch looks correct.

(Sorry for the late response... I was on holiday until today.
I see that this patch was added to your stable tree this morning.)


>
> Cheers,
> --
> Luís
>
>  From 4242f93ae1404b8e2b32a89aa071c76e7ea52ed1 Mon Sep 17 00:00:00 2001
> From: Dean Nelson <dnelson at redhat.com>
> Date: Wed, 29 Apr 2015 16:09:18 +0100
> Subject: [PATCH] arm64: add missing PAGE_ALIGN() to __dma_free()
>
> commit 2cff98b99c469880ce830cbcde015b53b67e0a7b upstream.
>
> __dma_alloc() does a PAGE_ALIGN() on the passed in size argument before
> doing anything else. __dma_free() does not. And because it doesn't, it is
> possible to leak memory should size not be an integer multiple of PAGE_SIZE.
>
> The solution is to add a PAGE_ALIGN() to __dma_free() like is done in
> __dma_alloc().
>
> Additionally, this patch removes a redundant PAGE_ALIGN() from
> __dma_alloc_coherent(), since __dma_alloc_coherent() can only be called
> from __dma_alloc(), which already does a PAGE_ALIGN() before the call.
>
> Acked-by: Catalin Marinas <catalin.marinas at arm.com>
> Signed-off-by: Dean Nelson <dnelson at redhat.com>
> Signed-off-by: Will Deacon <will.deacon at arm.com>
> [ luis: backported to 3.16: based on Dean's 3.19 backport ]
> Signed-off-by: Luis Henriques <luis.henriques at canonical.com>
> ---
>   arch/arm64/mm/dma-mapping.c | 4 +++-
>   1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
> index 893802645efe..0ada77e5d9e7 100644
> --- a/arch/arm64/mm/dma-mapping.c
> +++ b/arch/arm64/mm/dma-mapping.c
> @@ -86,7 +86,7 @@ static void __dma_free_coherent(struct device *dev, size_t size,
>
>   		dma_release_from_contiguous(dev,
>   					phys_to_page(paddr),
> -					size >> PAGE_SHIFT);
> +					PAGE_ALIGN(size) >> PAGE_SHIFT);
>   	} else {
>   		swiotlb_free_coherent(dev, size, vaddr, dma_handle);
>   	}
> @@ -138,6 +138,8 @@ static void __dma_free_noncoherent(struct device *dev, size_t size,
>   {
>   	void *swiotlb_addr = phys_to_virt(dma_to_phys(dev, dma_handle));
>
> +	size = PAGE_ALIGN(size);
> +
>   	vunmap(vaddr);
>   	__dma_free_coherent(dev, size, swiotlb_addr, dma_handle, attrs);
>   }
>





More information about the kernel-team mailing list