On pią, 2015-02-06 at 18:42 -0800, Darren Hart wrote: > On Tue, Jan 27, 2015 at 12:30:19PM +0100, Krzysztof Kozlowski wrote: > > The return value of power_supply_register() call was not checked and > > even on error probe() function returned 0. If registering failed then > > during unbind the driver tried to unregister power supply which was not > > actually registered. > > > > This could lead to memory corruption because power_supply_unregister() > > unconditionally cleans up given power supply. > > > > Fix this by checking return status of power_supply_register() call. In > > case of failure, unregister the hwmon device and fail the probe. Add a > > fixme note about missing hwmon_device_unregister() in driver removal. > > > > Signed-off-by: Krzysztof Kozlowski <k.kozlowski@xxxxxxxxxxx> > > Fixes: 9be0fcb5ed46 ("compal-laptop: add JHL90, battery & hwmon interface") > > Cc: <stable@xxxxxxxxxxxxxxx> > > --- > > drivers/platform/x86/compal-laptop.c | 7 ++++++- > > 1 file changed, 6 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/platform/x86/compal-laptop.c b/drivers/platform/x86/compal-laptop.c > > index 15c0fab2bfa1..cf55a9246f12 100644 > > --- a/drivers/platform/x86/compal-laptop.c > > +++ b/drivers/platform/x86/compal-laptop.c > > @@ -1036,12 +1036,16 @@ static int compal_probe(struct platform_device *pdev) > > > > /* Power supply */ > > initialize_power_supply_data(data); > > - power_supply_register(&compal_device->dev, &data->psy); > > + err = power_supply_register(&compal_device->dev, &data->psy); > > + if (err < 0) > > + goto psy_err; > > > > platform_set_drvdata(pdev, data); > > > > return 0; > > > > +psy_err: > > + hwmon_device_unregister(hwmon_dev); > > remove: > > sysfs_remove_group(&pdev->dev.kobj, &compal_platform_attr_group); > > return err; > > @@ -1072,6 +1076,7 @@ static int compal_remove(struct platform_device *pdev) > > > > data = platform_get_drvdata(pdev); > > power_supply_unregister(&data->psy); > > + /* FIXME: missing hwmon_device_unregister() */ > > Is this FIXME a leftover? Is there a reason we can't fix this now instead of > adding a FIXME? This is not a leftover. I think this should be fixed but: 1. I cannot test this driver, 2. I am not such familiar with hwmon API, so my fix could be wrong and introduce more errors than fixes. If you also think hwmon_device_unregister() is needed then I could send new version of patch. Also I would be happy if someone else fixed this. Best regards, Krzysztof -- To unsubscribe from this list: send the line "unsubscribe platform-driver-x86" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html