Selaa lähdekoodia

dma-coherent: catch oversized requests to dma_alloc_from_coherent()

Prevent passing an order to bitmap_find_free_region() that is larger than
the actual bitmap can represent.

These requests can come from device drivers that have no idea how big the
dma region is and need to rely on dma_alloc_from_coherent() to sort it out
for them.

Reported-by: Guennadi Liakhovetski <lg@denx.de>
Signed-off-by: Johannes Weiner <hannes@cmpxchg.org>
Cc: Pekka Enberg <penberg@cs.helsinki.fi>
Cc: Dmitry Baryshkov <dbaryshkov@gmail.com>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
Cc: Tetsuo Handa <penguin-kernel@i-love.sakura.ne.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Johannes Weiner 16 vuotta sitten
vanhempi
commit
58c6d3dfe4
1 muutettua tiedostoa jossa 2 lisäystä ja 0 poistoa
  1. 2 0
      kernel/dma-coherent.c

+ 2 - 0
kernel/dma-coherent.c

@@ -118,6 +118,8 @@ int dma_alloc_from_coherent(struct device *dev, ssize_t size,
 	mem = dev->dma_mem;
 	mem = dev->dma_mem;
 	if (!mem)
 	if (!mem)
 		return 0;
 		return 0;
+	if (unlikely(size > mem->size))
+ 		return 0;
 
 
 	pageno = bitmap_find_free_region(mem->bitmap, mem->size, order);
 	pageno = bitmap_find_free_region(mem->bitmap, mem->size, order);
 	if (pageno >= 0) {
 	if (pageno >= 0) {