As Laurent pointed out we must not use any information in the passed
var besides xoffset, yoffset and vmode as otherwise applications
might abuse it. Also use the aligned fix.line_length and not the
(possible) unaligned xres_virtual.
Signed-off-by: Florian Tobias Schandinat <[email protected]>
Reported-by: Laurent Pinchart <[email protected]>
Cc: [email protected]
---
drivers/video/via/viafbdev.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c
index 3114a87..aa87529 100644
--- a/drivers/video/via/viafbdev.c
+++ b/drivers/video/via/viafbdev.c
@@ -348,8 +348,9 @@ static int viafb_pan_display(struct fb_var_screeninfo *var,
struct fb_info *info)
{
struct viafb_par *viapar = info->par;
- u32 vram_addr = (var->yoffset * var->xres_virtual + var->xoffset)
- * (var->bits_per_pixel / 8) + viapar->vram_addr;
+ u32 vram_addr = viapar->vram_addr
+ + var->yoffset * info->fix.line_length
+ + var->xoffset * info->var.bits_per_pixel / 8;
DEBUG_MSG(KERN_DEBUG "viafb_pan_display, address = %d\n", vram_addr);
if (!viafb_dual_fb) {
--
1.6.3.2
Hi Florian,
On Tuesday 24 May 2011 00:07:26 Florian Tobias Schandinat wrote:
> As Laurent pointed out we must not use any information in the passed
> var besides xoffset, yoffset and vmode as otherwise applications
> might abuse it. Also use the aligned fix.line_length and not the
> (possible) unaligned xres_virtual.
>
> Signed-off-by: Florian Tobias Schandinat <[email protected]>
> Reported-by: Laurent Pinchart <[email protected]>
> Cc: [email protected]
Acked-by: Laurent Pinchart <[email protected]>
> ---
> drivers/video/via/viafbdev.c | 5 +++--
> 1 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c
> index 3114a87..aa87529 100644
> --- a/drivers/video/via/viafbdev.c
> +++ b/drivers/video/via/viafbdev.c
> @@ -348,8 +348,9 @@ static int viafb_pan_display(struct fb_var_screeninfo
> *var, struct fb_info *info)
> {
> struct viafb_par *viapar = info->par;
> - u32 vram_addr = (var->yoffset * var->xres_virtual + var->xoffset)
> - * (var->bits_per_pixel / 8) + viapar->vram_addr;
> + u32 vram_addr = viapar->vram_addr
> + + var->yoffset * info->fix.line_length
> + + var->xoffset * info->var.bits_per_pixel / 8;
>
> DEBUG_MSG(KERN_DEBUG "viafb_pan_display, address = %d\n", vram_addr);
> if (!viafb_dual_fb) {
--
Regards,
Laurent Pinchart