Re: Bad change in commit 297d716f6260cc9421d971b124ca196b957ee458?

From: Krzysztof Kozlowski
Date: Mon Jul 27 2015 - 19:46:35 EST


On 27.07.2015 22:10, H.J. Lu wrote:
> Hi,
>
> This commit:
>
> commit 297d716f6260cc9421d971b124ca196b957ee458
> Author: Krzysztof Kozlowski <k.kozlowski@xxxxxxxxxxx>
> Date: Thu Mar 12 08:44:11 2015 +0100
>
> power_supply: Change ownership from driver to core
>
> Change the ownership of power_supply structure from each driver
> implementing the class to the power supply core.
>
> has
>
> static void hidinput_cleanup_battery(struct hid_device *dev)
> {
> - if (!dev->battery.name)
> + if (!dev->battery)
> return;
>
> - power_supply_unregister(&dev->battery);
> - kfree(dev->battery.name);
> - dev->battery.name = NULL;
> + power_supply_unregister(dev->battery);
> + kfree(dev->battery->desc->name);
> + kfree(dev->battery->desc);
> + dev->battery = NULL;
> }
>
> Is this OK to access dev->battery after calling power_supply_unregister?

(+Cc Jiri, linux-input, linux-pm, Sebastian)

Good catch, it is not safe. The final device_unregister() will free the
structure.

We should access directly psy_desc here. I'll sent a proposal of fixing
this and check other drivers for this pattern.

Best regards,
Krzysztof
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/