lkml.org 
[lkml]   [2015]   [Jan]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.18 121/183] leds: netxbig: fix oops at probe time
    Date
    3.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Simon Guinot <simon.guinot@sequanux.org>

    commit 0c86ac2c50647451d6a70dc900f8bb0ee3d485d9 upstream.

    This patch fixes a NULL pointer dereference on led_dat->mode_val. Due to
    this bug, a kernel oops can be observed at probe time on the LaCie 2Big
    and 5Big v2 boards:

    Unable to handle kernel NULL pointer dereference at virtual address 00000008
    [...]
    [<c03f244c>] (netxbig_led_probe) from [<c02c8c6c>] (platform_drv_probe+0x4c/0x9c)
    [<c02c8c6c>] (platform_drv_probe) from [<c02c72d0>] (driver_probe_device+0x98/0x25c)
    [<c02c72d0>] (driver_probe_device) from [<c02c7520>] (__driver_attach+0x8c/0x90)
    [<c02c7520>] (__driver_attach) from [<c02c5c24>] (bus_for_each_dev+0x68/0x94)
    [<c02c5c24>] (bus_for_each_dev) from [<c02c6408>] (bus_add_driver+0x124/0x1dc)
    [<c02c6408>] (bus_add_driver) from [<c02c7ac0>] (driver_register+0x78/0xf8)
    [<c02c7ac0>] (driver_register) from [<c000888c>] (do_one_initcall+0x80/0x1cc)
    [<c000888c>] (do_one_initcall) from [<c0733618>] (kernel_init_freeable+0xe4/0x1b4)
    [<c0733618>] (kernel_init_freeable) from [<c058db9c>] (kernel_init+0xc/0xec)
    [<c058db9c>] (kernel_init) from [<c0009850>] (ret_from_fork+0x14/0x24)
    [...]

    This bug was introduced by commit 588a6a99286ae30afb1339d8bc2163517b1b7dd1
    ("leds: netxbig: fix attribute-creation race").

    Signed-off-by: Simon Guinot <simon.guinot@sequanux.org>
    Acked-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Bryan Wu <cooloney@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    diff --git a/drivers/leds/leds-netxbig.c b/drivers/leds/leds-netxbig.c
    index 26515c27ea8c..25e419752a7b 100644
    --- a/drivers/leds/leds-netxbig.c
    +++ b/drivers/leds/leds-netxbig.c
    @@ -330,18 +330,18 @@ create_netxbig_led(struct platform_device *pdev,
    led_dat->sata = 0;
    led_dat->cdev.brightness = LED_OFF;
    led_dat->cdev.flags |= LED_CORE_SUSPENDRESUME;
    - /*
    - * If available, expose the SATA activity blink capability through
    - * a "sata" sysfs attribute.
    - */
    - if (led_dat->mode_val[NETXBIG_LED_SATA] != NETXBIG_LED_INVALID_MODE)
    - led_dat->cdev.groups = netxbig_led_groups;
    led_dat->mode_addr = template->mode_addr;
    led_dat->mode_val = template->mode_val;
    led_dat->bright_addr = template->bright_addr;
    led_dat->bright_max = (1 << pdata->gpio_ext->num_data) - 1;
    led_dat->timer = pdata->timer;
    led_dat->num_timer = pdata->num_timer;
    + /*
    + * If available, expose the SATA activity blink capability through
    + * a "sata" sysfs attribute.
    + */
    + if (led_dat->mode_val[NETXBIG_LED_SATA] != NETXBIG_LED_INVALID_MODE)
    + led_dat->cdev.groups = netxbig_led_groups;

    return led_classdev_register(&pdev->dev, &led_dat->cdev);
    }



    \
     
     \ /
      Last update: 2015-01-25 20:01    [W:8.755 / U:0.080 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site