video: da8xx-fb: fb_check_var enhancement
PATCH v3 1/20 video: da8xx-fb: fb_check_var enhancement
From: Afzal Mohammed <[email protected]>
Check whether "struct fb_var_screeninfo" fields are sane, if not update it to be within allowed limits.
If user sends down buggy "var" values, this will bring those within allowable limits. And fb_set_par is not supposed to change "var" values, fb_check_var has to ensure that values are proper.
Signed-off-by Afzal Mohammed <[email protected]>
Signed-off-by Darren Etheridge <[email protected]>
--- drivers/video/da8xx-fb.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-)
drivers/video/da8xx-fb.c +18 -0
@@ -888,6 +888,9 @@ static int fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) {int err =0 ; +struct da8xx_fb_par *par = info->par; +int bpp = var->bits_per_pixel >>3 ; +unsigned long line_size = var->xres_virtual * bpp;if (var->bits_per_pixel >16 && lcd_revision =LCD_VERSION_1 )return -EINVAL ;
@@ -955,6 +958,21 @@ static int fb_check_var(struct fb_var_screeninfo *var, var->green.msb_right =0 ; var->blue.msb_right =0 ; var->transp.msb_right =0 ; + +if (line_size * var->yres_virtual > par->vram_size) + var->yres_virtual = par->vram_size / line_size; + +if (var->yres > var->yres_virtual) + var->yres = var->yres_virtual; + +if (var->xres > var->xres_virtual) + var->xres = var->xres_virtual; + +if (var->xres + var->xoffset > var->xres_virtual) + var->xoffset = var->xres_virtual - var->xres; +if (var->yres + var->yoffset > var->yres_virtual) + var->yoffset = var->yres_virtual - var->yres; +return err; }
Signature · 1 line
1.7.0.4