[PATCH 21/29] video: rework mode_name parameter setting

Sascha Hauer s.hauer at pengutronix.de
Mon Apr 7 23:39:28 PDT 2014


On Mon, Apr 07, 2014 at 06:45:55PM +0400, Alexander Shiyan wrote:
> Fri, 14 Mar 2014 15:32:41 +0100 от Sascha Hauer <s.hauer at pengutronix.de>:
> > 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 <s.hauer at pengutronix.de>
> > ---
> ...
> > +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 <s.hauer at pengutronix.de>
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 <shc_work at mail.ru>
Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
---
 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 |



More information about the barebox mailing list