[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20090127134831.3dd04182.akpm@linux-foundation.org>
Date: Tue, 27 Jan 2009 13:48:31 -0800
From: Andrew Morton <akpm@...ux-foundation.org>
To: Paul Mundt <lethal@...ux-sh.org>
Cc: adrian@...golddream.dyndns.info, lkmladrian@...il.com,
linux-kernel@...r.kernel.org, linux-sh@...r.kernel.org,
penberg@...helsinki.fi, dbaryshkov@...il.com,
penguin-kernel@...ove.sakura.ne.jp, lg@...x.de, hannes@...xchg.org
Subject: Re: [PATCH] dma: fix up broken comparison in
dma_alloc_from_coherent
On Wed, 21 Jan 2009 17:11:19 +0900
Paul Mundt <lethal@...ux-sh.org> wrote:
> @@ -118,31 +118,32 @@ int dma_alloc_from_coherent(struct device *dev, ssize_t size,
> mem = dev->dma_mem;
> if (!mem)
> return 0;
> - if (unlikely(size > mem->size))
> - return 0;
> +
> + *ret = NULL;
> +
> + if (unlikely(size > (mem->size << PAGE_SHIFT)))
> + goto err;
Looks a bit broken on 64-bit.
`size' is ssize_t (long).
`mem->size' is `int'.
The left shift can overflow and cause badnesses.
> + *dma_handle = mem->device_base + (pageno << PAGE_SHIFT);
> + *ret = mem->virt_base + (pageno << PAGE_SHIFT);
Ditto.
Maybe it's a can't-happen (why?), but...
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists