Re: Regression 2.6.39-rc1 for sony-laptop

From: Mattia Dongili
Date: Sat Apr 02 2011 - 06:01:18 EST


On Sat, Apr 02, 2011 at 11:44:57AM +0200, Andrea Gelmini wrote:
> 2011/4/1 Matthew Garrett <mjg59@xxxxxxxxxxxxx>:
> > touch any Sony code. I'll take a look at the Sony patches, thanks for
> > the report!
>
> Hi Matthew,
> and thanks a lot for your quick answer.
> Maybe I messed up with bisect trying to find the origin of two regression.
> One was this. The other one is this one.
>
> Hibernation (to disk, of course) doesn't work no more.
> Screen blanks and nothing happens. No HD activity, and so on. I also
> waited some minutes.
>
> Well, bisect blame this commit:
>
> commit 2a4f0c81adcd1f812a63bc9106be2fd26f437730
> Author: Mattia Dongili <malattia@xxxxxxxx>
> Date: Sat Feb 19 11:52:30 2011 +0900
>
> sony-laptop: cache handles and report them via sysfs
>
> Avoid calling into acpi each time we need to lookup a method handle
> and report the available handles to ease collection of information when
> debugging issues. Also move initialization of the platform driver
> earlier to allow adding files from other setup functions.
>
> Signed-off-by: Mattia Dongili <malattia@xxxxxxxx>
> Signed-off-by: Matthew Garrett <mjg@xxxxxxxxxx>
>
> drivers/platform/x86/sony-laptop.c | 97 ++++++++++++++++++++++++++++++------
> 1 files changed, 81 insertions(+), 16 deletions(-)
>
> Do you have any suggestion to better track down this issue?
> It's not possibile to simply revert it.

As already reported the following patch should fix the issue:

commit 88d25cbfda526567dabf056a868d8ff5f22a962e
Author: Mattia Dongili <malattia@xxxxxxxx>
Date: Fri Apr 1 10:01:41 2011 +0900

sony-laptop: fix early NULL pointer dereference

The SNC acpi driver could get early notifications before it fully
initializes and that could lead to dereferencing the sony_nc_handles
structure pointer that is still NULL at that stage.
Make sure we return early from the handle lookup function in these
cases.

Signed-off-by: Mattia Dongili <malattia@xxxxxxxx>

diff --git a/drivers/platform/x86/sony-laptop.c b/drivers/platform/x86/sony-laptop.c
index b2ce172..7082c55 100644
--- a/drivers/platform/x86/sony-laptop.c
+++ b/drivers/platform/x86/sony-laptop.c
@@ -810,6 +810,11 @@ static int sony_nc_handles_cleanup(struct platform_device *pd)
static int sony_find_snc_handle(int handle)
{
int i;
+
+ /* not initialized yet, return early */
+ if (!handles)
+ return -1;
+
for (i = 0; i < 0x10; i++) {
if (handles->cap[i] == handle) {
dprintk("found handle 0x%.4x (offset: 0x%.2x)\n",
--
mattia
:wq!
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/