On Mon, Apr 07, 2014 at 06:45:55PM +0400, Alexander Shiyan wrote:
> Fri, 14 Mar 2014 15:32:41 +0100 от Sascha Hauer <[email protected]>:
> > We have dev_add_param_enum() now, so use it for the mode_name
> > setting. Also drop the special case for single mode framebuffers,
> > just add the mode_name parameter for this case aswell.
> > 
> > Signed-off-by: Sascha Hauer <[email protected]>
> > ---
> ...
> > +static int fb_setup_mode(struct fb_info *info)
> > +{
> > +   struct device_d *dev = &info->dev;
> > +   int ret;
> ...
> > -   ret = info->fbops->fb_activate_var(info);
> > +   if (info->fbops->fb_activate_var) {
> > +           ret = info->fbops->fb_activate_var(info);
> > +           if (ret)
> > +                   return ret;
> > +   }
> 
> So, "ret" is unitialized without fb_activate_var().
> It is wrong since this variable is used in code below.

Damn. I remember times when compilers used to warn on unitialized
variables :(

The following should fix this.

Thanks for reporting.

Sascha

--------------------8<--------------------------------

From 7b8779541f86bbc6f6b461f1ea1c2f4310bb8335 Mon Sep 17 00:00:00 2001
From: Sascha Hauer <[email protected]>
Date: Tue, 8 Apr 2014 08:37:09 +0200
Subject: [PATCH] fb: Fix use of unitialized variable

'ret' is only initialized when info->fbops->fb_activate_var exists, so
only use it in this case.

Reported-by: Alexander Shiyan <[email protected]>
Signed-off-by: Sascha Hauer <[email protected]>
---
 drivers/video/fb.c | 15 +++++++--------
 1 file changed, 7 insertions(+), 8 deletions(-)

diff --git a/drivers/video/fb.c b/drivers/video/fb.c
index 2c8b8eb..ecf6142 100644
--- a/drivers/video/fb.c
+++ b/drivers/video/fb.c
@@ -85,8 +85,10 @@ static int fb_setup_mode(struct fb_info *info)
 
        if (info->fbops->fb_activate_var) {
                ret = info->fbops->fb_activate_var(info);
-               if (ret)
+               if (ret) {
+                       info->cdev.size = 0;
                        return ret;
+               }
        }
 
        if (!info->line_length)
@@ -94,14 +96,11 @@ static int fb_setup_mode(struct fb_info *info)
        if (!info->screen_size)
                info->screen_size = info->line_length * info->yres;
 
-       if (!ret) {
-               dev->resource[0].start = (resource_size_t)info->screen_base;
-               info->cdev.size = info->line_length * info->yres;
-               dev->resource[0].end = dev->resource[0].start + info->cdev.size 
- 1;
-       } else
-               info->cdev.size = 0;
+       dev->resource[0].start = (resource_size_t)info->screen_base;
+       info->cdev.size = info->line_length * info->yres;
+       dev->resource[0].end = dev->resource[0].start + info->cdev.size - 1;
 
-       return ret;
+       return 0;
 }
 
 static int fb_set_modename(struct param_d *param, void *priv)
-- 
1.9.1

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/barebox

Reply via email to