* LCD: fix oops if driver only interested in .set_power
@ 2008-11-18 18:31 Ben Dooks
0 siblings, 0 replies; 2+ messages in thread
From: Ben Dooks @ 2008-11-18 18:31 UTC (permalink / raw)
To: linux-fbdev-devel; +Cc: akpm, Ben Dooks
[-- Attachment #1: add-null-setmode.patch --]
[-- Type: text/plain, Size: 1735 bytes --]
The LCD driver core calls LCD drivers when either the blanking state
or the display mode has changed, but does not make any check to see
if the called driver has a .set_mode method.
This means if a driver only has a .set_power method then the system
will OOPS on changing mode (and with the console semaphore held so
you cannot easily see the problem).
Fix the problem by ensuring that either callback is valid before use.
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
Index: linux.git/drivers/video/backlight/lcd.c
===================================================================
--- linux.git.orig/drivers/video/backlight/lcd.c 2008-11-18 15:07:37.000000000 +0000
+++ linux.git/drivers/video/backlight/lcd.c 2008-11-18 15:08:18.000000000 +0000
@@ -42,10 +42,13 @@ static int fb_notifier_callback(struct n
mutex_lock(&ld->ops_lock);
if (!ld->ops->check_fb || ld->ops->check_fb(ld, evdata->info)) {
- if (event == FB_EVENT_BLANK)
- ld->ops->set_power(ld, *(int *)evdata->data);
- else
- ld->ops->set_mode(ld, evdata->data);
+ if (event == FB_EVENT_BLANK) {
+ if (ld->ops->set_power)
+ ld->ops->set_power(ld, *(int *)evdata->data);
+ } else {
+ if (ld->ops->set_mode)
+ ld->ops->set_mode(ld, evdata->data);
+ }
}
mutex_unlock(&ld->ops_lock);
return 0;
--
Ben (ben@fluff.org, http://www.fluff.org/)
'a smiley only costs 4 bytes'
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: LCD: fix oops if driver only interested in .set_power
[not found] <20081118180350.390792130@fluff.org.uk>
@ 2008-11-18 18:31 ` Ben Dooks
0 siblings, 0 replies; 2+ messages in thread
From: Ben Dooks @ 2008-11-18 18:31 UTC (permalink / raw)
To: Ben Dooks; +Cc: akpm, linux-fbdev-devel
On Tue, Nov 18, 2008 at 06:03:50PM +0000, Ben Dooks wrote:
> The LCD driver core calls LCD drivers when either the
> blanking state or the display mode has changed, but
> does not make any check to see if the called driver
> has a .set_mode method.
>
> This means if a driver only has a .set_power method
> then the system will OOPS on changing mode (and with
> the console semaphore held so you cannot easily see
> the problem).
>
> Fix the problem by ensuring that either callback is
> valid before calling it.
>
> Signed-off-by: Ben Dooks <ben-linux@fluff.org>
> Index: linux.git/drivers/video/backlight/lcd.c
> ===================================================================
> --- linux.git.orig/drivers/video/backlight/lcd.c 2008-11-18 12:59:21.000000000 +0000
> +++ linux.git/drivers/video/backlight/lcd.c 2008-11-18 15:07:25.000000000 +0000
> @@ -43,9 +43,11 @@ static int fb_notifier_callback(struct n
> mutex_lock(&ld->ops_lock);
> if (!ld->ops->check_fb || ld->ops->check_fb(ld, evdata->info)) {
> if (event == FB_EVENT_BLANK)
> - ld->ops->set_power(ld, *(int *)evdata->data);
> + if (ld->ops->set_power)
> + ld->ops->set_power(ld, *(int *)evdata->data);
> else
sorry, needed to put {} around the outer if block to keep gcc
happy.
> - ld->ops->set_mode(ld, evdata->data);
> + if (ld->ops->set_mode)
> + ld->ops->set_mode(ld, evdata->data);
> }
> mutex_unlock(&ld->ops_lock);
> return 0;
>
> --
> Ben (ben@fluff.org, http://www.fluff.org/)
>
> 'a smiley only costs 4 bytes'
>
> -------------------------------------------------------------------------
> This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
> Build the coolest Linux based applications with Moblin SDK & win great prizes
> Grand prize is a trip for two to an Open Source event anywhere in the world
> http://moblin-contest.org/redirect.php?banner_id=100&url=/
> _______________________________________________
> Linux-fbdev-devel mailing list
> Linux-fbdev-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/linux-fbdev-devel
--
Ben (ben@fluff.org, http://www.fluff.org/)
'a smiley only costs 4 bytes'
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2008-11-18 18:31 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20081118180350.390792130@fluff.org.uk>
2008-11-18 18:31 ` LCD: fix oops if driver only interested in .set_power Ben Dooks
2008-11-18 18:31 Ben Dooks
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).