leds: netxbig: fix oops at probe time
PATCH RESEND 1/1 leds: netxbig: fix oops at probe time
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").
--- drivers/leds/leds-netxbig.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/leds/leds-netxbig.c +6 -6
@@ -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); }
Signature · 1 line
2.1.1
PATCH RESEND 1/1 leds: netxbig: fix oops at probe time
Quoted 18 lines · Simon Guinot
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) [...]
Quoted 6 lines
This bug was introduced by commit
588a6a99286ae30afb1339d8bc2163517b1b7dd1("leds: netxbig: fix attribute-creation race").Signed-off-by Simon Guinot <[email protected]>Cc <[email protected]> # 3.17+Acked-by Johan Hovold <[email protected]>
Hi Bryan, Richard
Simon has asked that this be taken via mvebu, since there has not been any response from the LED maintainers. I will queue it up as part of my next set of fixes for -rc3, and Cc: you on the pull request.
If this is not O.K. with you, please let me know.
Thanks
Andrew
Quoted 36 lines
--- drivers/leds/leds-netxbig.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)drivers/leds/leds-netxbig.c +6
-6@@ -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); }Signature · 1 line
2.1.1