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? -- Darren Hart Intel Open Source Technology Center -- To unsubscribe from this list: send the line "unsubscribe stable" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html