[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