diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2013-04-18 01:39:47 -0400 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2013-04-26 01:28:56 -0400 |
commit | 04f8afbec37f63fafce16e454a7848426aa36202 (patch) | |
tree | 1c761c03f67ebdc71163aaaf0389a092f29916c6 /drivers/video/vfb.c | |
parent | 11bd5933abe033fb7a3a0d1f1bd2cb4b6df8143f (diff) |
fbdev: improve fb_mmap bounds checks
Improve fb_mmap bounds checks in gbefb, smscufx, udlfb and vfb drivers to
prevent possible uint overflows.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Cc: Steve Glendinning <steve.glendinning@smsc.com>
Cc: Bernie Thompson <bernie@plugable.com>
Diffstat (limited to 'drivers/video/vfb.c')
-rw-r--r-- | drivers/video/vfb.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/video/vfb.c b/drivers/video/vfb.c index 8bc1f9398945..ee5985efa15c 100644 --- a/drivers/video/vfb.c +++ b/drivers/video/vfb.c | |||
@@ -420,9 +420,12 @@ static int vfb_mmap(struct fb_info *info, | |||
420 | unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; | 420 | unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; |
421 | unsigned long page, pos; | 421 | unsigned long page, pos; |
422 | 422 | ||
423 | if (offset + size > info->fix.smem_len) { | 423 | if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT)) |
424 | return -EINVAL; | ||
425 | if (size > info->fix.smem_len) | ||
426 | return -EINVAL; | ||
427 | if (offset > info->fix.smem_len - size) | ||
424 | return -EINVAL; | 428 | return -EINVAL; |
425 | } | ||
426 | 429 | ||
427 | pos = (unsigned long)info->fix.smem_start + offset; | 430 | pos = (unsigned long)info->fix.smem_start + offset; |
428 | 431 | ||