]> git.baikalelectronics.ru Git - kernel.git/commit
fbcmap: integer overflow bug
authorDan Carpenter <error27@gmail.com>
Tue, 16 Nov 2010 09:11:02 +0000 (12:11 +0300)
committerPaul Mundt <lethal@linux-sh.org>
Wed, 17 Nov 2010 05:55:45 +0000 (14:55 +0900)
commit19b36a961d525433b7beb357160011728967ff56
tree1d9a9ead0d2c7cb18e46cc35878a0d64daaeb545
parent28ea9b411926ca775673ab97e87fcf71e1ba8dd8
fbcmap: integer overflow bug

There is an integer overflow in fb_set_user_cmap() because cmap->len * 2
can wrap.  It's basically harmless.  Your terminal will be messed up
until you type reset.

This patch does three things to fix the bug.

First, it checks the return value of fb_copy_cmap() in fb_alloc_cmap().
That is enough to fix address the overflow.

Second it checks for the integer overflow in fb_set_user_cmap().

Lastly I wanted to cap "cmap->len" in fb_set_user_cmap() much lower
because it gets used to determine the size of allocation.  Unfortunately
no one knows what the limit should be.  Instead what this patch does
is makes the allocation happen with GFP_KERNEL instead of GFP_ATOMIC
and lets the kmalloc() decide what values of cmap->len are reasonable.
To do this, the patch introduces a function called fb_alloc_cmap_gfp()
which is like fb_alloc_cmap() except that it takes a GFP flag.

Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
drivers/video/fbcmap.c
include/linux/fb.h