platform-drivers-x86: eeepc-laptop: fix wrong test for successful registered led_classdev
PATCH 1/3 platform-drivers-x86: eeepc-laptop: fix wrong test for successful registered led_classdev
device_create returns &struct device pointer on success, or ERR_PTR() on error. Thus if led_classdev_register fails, led_cdev->dev is always not NULL.
If IS_ERR(eeepc->tpd_led.dev) is ture, it means led_classdev_register fails. If (asus->tpd_led.dev) is NULL, it means we call eeepc_led_exit before calling led_classdev_register for &eeepc->tpd_led.
We only want to call led_classdev_unregister for sucessfully registered led_classdev, then we should check (!IS_ERR_OR_NULL(eeepc->tpd_led.dev)).
--- drivers/platform/x86/eeepc-laptop.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
drivers/platform/x86/eeepc-laptop.c +1 -1
@@ -568,7 +568,7 @@ static int eeepc_led_init(struct eeepc_laptop *eeepc)static void eeepc_led_exit (struct eeepc_laptop *eeepc) { -if (eeepc->tpd_led.dev) +if (!IS_ERR_OR_NULL (eeepc->tpd_led.dev))led_classdev_unregister (&eeepc->tpd_led);if (eeepc->led_workqueue)destroy_workqueue (eeepc->led_workqueue);
Signature · 1 line
1.7.4.1
PATCH 2/3 platform-drivers-x86: asus-wmi: fix resource leak in asus_wmi_led_exit
This patch fixes wrong test for successful registered led_classdev, and also fixes a leak due to missing led_classdev_unregister call for asus->kbd_led in asus_wmi_led_exit.
device_create returns &struct device pointer on success, or ERR_PTR() on error. Thus if led_classdev_register fails, led_cdev->dev is always not NULL.
Thus to unregister a successful registered led_classdev, we should check (!IS_ERR_OR_NULL(asus->tpd_led.dev)) instead of (asus->tpd_led.dev).
we use IS_ERR_OR_NULL instead of IS_ERR because if we havn't call led_classdev_register, the led_cdev->dev is NULL.
--- drivers/platform/x86/asus-wmi.c | 4 +++- 1 files changed, 3 insertions(+), 1 deletions(-)
drivers/platform/x86/asus-wmi.c +3 -1
@@ -453,7 +453,9 @@ static enum led_brightness kbd_led_get(struct led_classdev *led_cdev)static void asus_wmi_led_exit (struct asus_wmi *asus) { -if (asus->tpd_led.dev) +if (!IS_ERR_OR_NULL (asus->kbd_led.dev)) +led_classdev_unregister (&asus->kbd_led); +if (!IS_ERR_OR_NULL (asus->tpd_led.dev))led_classdev_unregister (&asus->tpd_led);if (asus->led_workqueue)destroy_workqueue (asus->led_workqueue);
Signature · 1 line
1.7.4.1
Re: [PATCH 2/3] platform-drivers-x86: asus-wmi: fix resource leak in asus_wmi_led_exit
Quoted 7 lines · Axel Lin
This patch fixes wrong test for successful registered
led_classdev, and also fixes a leak due to missingled_classdev_unregistercall forasus->kbd_ledinasus_wmi_led_exit.
device_createreturns &struct device pointer on success, orERR_PTR()on error. Thus ifled_classdev_registerfails,led_cdev->devis always not NULL.
Quoted 7 lines
Thus to unregister a successful registered
led_classdev, we should check (!IS_ERR_OR_NULL(asus->tpd_led.dev)) instead of (asus->tpd_led.dev).we use
IS_ERR_OR_NULLinstead ofIS_ERRbecause if we havn't callled_classdev_register, theled_cdev->devis NULL.Signed-off-by Axel Lin <[email protected]>
Quoted 25 lines
---
drivers/platform/x86/asus-wmi.c | 4 +++-1 files changed, 3 insertions(+), 1 deletions(-)drivers/platform/x86/asus-wmi.c +3
-2@@ -453,7 +453,9 @@ static enum led_brightness kbd_led_get(struct led_classdev *led_cdev) static void asus_wmi_led_exit(struct asus_wmi *asus) { - if (asus->tpd_led.dev) + if (!IS_ERR_OR_NULL(asus->kbd_led.dev)) + led_classdev_unregister(&asus->kbd_led); + if (!IS_ERR_OR_NULL(asus->tpd_led.dev)) led_classdev_unregister(&asus->tpd_led); if (asus->led_workqueue) destroy_workqueue(asus->led_workqueue); --1.7.4.1
Signature · 2 lines
Corentin Chary http://xf.iksaif.net
PATCH 3/3 platform-drivers-x86: asus-laptop: fix wrong test for successful registered led_classdev
In reply to Axel Lindevice_create returns &struct device pointer on success, or ERR_PTR() on error. Thus if led_classdev_register fails, led_cdev->dev is always not NULL.
Thus to unregister a successful registered led_classdev, we should check IS_ERR_OR_NULL macro for led_cdev->dev instead of checking if led_cdev->dev is NULL or not.
we use IS_ERR_OR_NULL instead of IS_ERR because if we havn't call led_classdev_register, the led_cdev->dev is NULL.
--- drivers/platform/x86/asus-laptop.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
drivers/platform/x86/asus-laptop.c +6 -6
@@ -430,17 +430,17 @@ static enum led_brightness asus_kled_cdev_get(struct led_classdev *led_cdev)static void asus_led_exit (struct asus_laptop *asus) { -if (asus->mled.led.dev) +if (!IS_ERR_OR_NULL (asus->mled.led.dev))led_classdev_unregister (&asus->mled.led); -if (asus->tled.led.dev) +if (!IS_ERR_OR_NULL (asus->tled.led.dev))led_classdev_unregister (&asus->tled.led); -if (asus->pled.led.dev) +if (!IS_ERR_OR_NULL (asus->pled.led.dev))led_classdev_unregister (&asus->pled.led); -if (asus->rled.led.dev) +if (!IS_ERR_OR_NULL (asus->rled.led.dev))led_classdev_unregister (&asus->rled.led); -if (asus->gled.led.dev) +if (!IS_ERR_OR_NULL (asus->gled.led.dev))led_classdev_unregister (&asus->gled.led); -if (asus->kled.led.dev) +if (!IS_ERR_OR_NULL (asus->kled.led.dev))led_classdev_unregister (&asus->kled.led);if (asus->led_workqueue) {destroy_workqueue (asus->led_workqueue);
Signature · 1 line
1.7.4.1
Re: [PATCH 3/3] platform-drivers-x86: asus-laptop: fix wrong test for successful registered led_classdev
Quoted 11 lines · Axel Lin
device_createreturns &struct device pointer on success, orERR_PTR()on error. Thus ifled_classdev_registerfails,led_cdev->devis always not NULL.Thus to unregister a successful registered
led_classdev, we should checkIS_ERR_OR_NULLmacro forled_cdev->devinstead of checking ifled_cdev->devis NULL or not.we use
IS_ERR_OR_NULLinstead ofIS_ERRbecause if we havn't callled_classdev_register, theled_cdev->devis NULL.Signed-off-by Axel Lin <[email protected]>
Quoted 38 lines
---
drivers/platform/x86/asus-laptop.c | 12 ++++++------1 files changed, 6 insertions(+), 6 deletions(-)drivers/platform/x86/asus-laptop.c +6
-7@@ -430,17 +430,17 @@ static enum led_brightness asus_kled_cdev_get(struct led_classdev *led_cdev) static void asus_led_exit(struct asus_laptop *asus) { - if (asus->mled.led.dev) + if (!IS_ERR_OR_NULL(asus->mled.led.dev)) led_classdev_unregister(&asus->mled.led); - if (asus->tled.led.dev) + if (!IS_ERR_OR_NULL(asus->tled.led.dev)) led_classdev_unregister(&asus->tled.led); - if (asus->pled.led.dev) + if (!IS_ERR_OR_NULL(asus->pled.led.dev)) led_classdev_unregister(&asus->pled.led); - if (asus->rled.led.dev) + if (!IS_ERR_OR_NULL(asus->rled.led.dev)) led_classdev_unregister(&asus->rled.led); - if (asus->gled.led.dev) + if (!IS_ERR_OR_NULL(asus->gled.led.dev)) led_classdev_unregister(&asus->gled.led); - if (asus->kled.led.dev) + if (!IS_ERR_OR_NULL(asus->kled.led.dev)) led_classdev_unregister(&asus->kled.led); if (asus->led_workqueue) { destroy_workqueue(asus->led_workqueue); --1.7.4.1
Signature · 13 lines
Corentin Chary http://xf.iksaif.net ------------------------------------------------------------------------------ BlackBerry® DevCon Americas, Oct. 18-20, San Francisco, CA The must-attend event for mobile developers. Connect with experts. Get tools for creating Super Apps. See the latest technologies. Sessions, hands-on labs, demos & much more. Register early & save! http://p.sf.net/sfu/rim-blackberry-1 _______________________________________________ Acpi4asus-user mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/acpi4asus-user
Good catch ! It would be great to have a coccinel script to check that in scripts/coccinelle/null/.
Quoted 11 lines · Axel Lin
device_createreturns &struct device pointer on success, orERR_PTR()on error. Thus ifled_classdev_registerfails,led_cdev->devis always not NULL.If
IS_ERR(eeepc->tpd_led.dev)is ture, it meansled_classdev_registerfails. If (asus->tpd_led.dev) is NULL, it means we calleeepc_led_exitbefore callingled_classdev_registerfor&eeepc->tpd_led.We only want to call
led_classdev_unregisterfor sucessfully registeredled_classdev, then we should check (!IS_ERR_OR_NULL(eeepc->tpd_led.dev)).Signed-off-by Axel Lin <[email protected]>
Quoted 27 lines
---
drivers/platform/x86/eeepc-laptop.c | 2 +-1 files changed, 1 insertions(+), 1 deletions(-)drivers/platform/x86/eeepc-laptop.c +1
-2@@ -568,7 +568,7 @@ static int eeepc_led_init(struct eeepc_laptop *eeepc) static void eeepc_led_exit(struct eeepc_laptop *eeepc) { - if (eeepc->tpd_led.dev) + if (!IS_ERR_OR_NULL(eeepc->tpd_led.dev)) led_classdev_unregister(&eeepc->tpd_led); if (eeepc->led_workqueue) destroy_workqueue(eeepc->led_workqueue); --1.7.4.1
--
To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Signature · 2 lines
Corentin Chary http://xf.iksaif.net