Commit 99e9e7d6 authored by Florian Tobias Schandinat's avatar Florian Tobias Schandinat Committed by Linus Torvalds

fb: fix fb_pan_display range check

Fix the range check for panning.  The current code fails to detect some
invalid values (very high ones that can occur if an app tries to move
further up/left than 0,0) as the check uses the unknown values for
calculation so that an overflow can occur.

To fix this it is sufficient to move the calculation to the right side to
use only trusted values.

Kai Jiang detected this problem and proposed an initial patch.
Signed-off-by: default avatarFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>
Cc: Kai Jiang <b18973@freescale.com>
Cc: Krzysztof Helt <krzysztof.h1@poczta.fm>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ff8147fe
...@@ -871,8 +871,8 @@ fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var) ...@@ -871,8 +871,8 @@ fb_pan_display(struct fb_info *info, struct fb_var_screeninfo *var)
err = -EINVAL; err = -EINVAL;
if (err || !info->fbops->fb_pan_display || if (err || !info->fbops->fb_pan_display ||
var->yoffset + yres > info->var.yres_virtual || var->yoffset > info->var.yres_virtual - yres ||
var->xoffset + info->var.xres > info->var.xres_virtual) var->xoffset > info->var.xres_virtual - info->var.xres)
return -EINVAL; return -EINVAL;
if ((err = info->fbops->fb_pan_display(var, info))) if ((err = info->fbops->fb_pan_display(var, info)))
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment