[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 21 23:25:20 UTC 2015


On 05/21/2015 03:36 PM, Kamal Mostafa wrote:
> This is a note to let you know that I have just added a patch titled
>
>      arm64: add missing PAGE_ALIGN() to __dma_free()
>
> to the linux-3.19.y-queue branch of the 3.19.y-ckt extended stable tree
> which can be found at:
>
>      http://kernel.ubuntu.com/git/ubuntu/linux.git/log/?h=linux-3.19.y-queue
>
> This patch is scheduled to be released in version 3.19.8-ckt1.
>
> 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.

And another patch that is in the same vein, but different is needed
for 3.14.y.

The problem doesn't exist prior to 3.14.y.

Hope this helps.

Dean


>
> For more information about the 3.19.y-ckt tree, see
> https://wiki.ubuntu.com/Kernel/Dev/ExtendedStable
>
> Thanks.
> -Kamal
>
> ------
>
>  From 9ad6a488fa341116b1829a5ae2cd33cae77b91bb Mon Sep 17 00:00:00 2001
> From: Dean Nelson <dnelson at redhat.com>
> Date: Wed, 29 Apr 2015 16:09:18 +0100
> Subject: 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>
> [ kamal: backport to 3.19-stable: applied to __dma_free_noncoherent(); context ]
> Signed-off-by: Kamal Mostafa <kamal at canonical.com>
> ---
>   arch/arm64/mm/dma-mapping.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm64/mm/dma-mapping.c b/arch/arm64/mm/dma-mapping.c
> index 6efbb52..34575b4 100644
> --- a/arch/arm64/mm/dma-mapping.c
> +++ b/arch/arm64/mm/dma-mapping.c
> @@ -104,7 +104,6 @@ static void *__dma_alloc_coherent(struct device *dev, size_t size,
>   		struct page *page;
>   		void *addr;
>
> -		size = PAGE_ALIGN(size);
>   		page = dma_alloc_from_contiguous(dev, size >> PAGE_SHIFT,
>   							get_order(size));
>   		if (!page)
> @@ -189,6 +188,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);
> +
>   	if (__free_from_pool(vaddr, size))
>   		return;
>   	vunmap(vaddr);
> --
> 1.9.1
>

-------------- next part --------------
A non-text attachment was scrubbed...
Name: fix-stable-3.18.y-and-3.19.y.patch
Type: text/x-patch
Size: 2574 bytes
Desc: not available
URL: <https://lists.ubuntu.com/archives/kernel-team/attachments/20150521/03f9c61d/attachment.bin>


More information about the kernel-team mailing list