lkml.org 
[lkml]   [2015]   [Feb]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [PATCH v4 11/20] power_supply: Change ownership from driver to core
On Mon, 23 Feb 2015, Krzysztof Kozlowski wrote:

> Change the ownership of power_supply structure from each driver
> implementing the class to the power supply core.
>
> The patch changes power_supply_register() function thus all drivers
> implementing power supply class are adjusted.
>
> Each driver provides the implementation of power supply. However it
> should not be the owner of power supply class instance because it is
> exposed by core to other subsystems with power_supply_get_by_name().
> These other subsystems have no knowledge when the driver will unregister
> the power supply. This leads to several issues when driver is unbound -
> mostly because user of power supply accesses freed memory.
>
> Instead let the core own the instance of struct 'power_supply'. Other
> users of this power supply will still access valid memory because it
> will be freed when device reference count reaches 0. Currently this
> means "it will leak" but power_supply_put() call in next patches will
> solve it.
>
> This solves invalid memory references in following race condition
> scenario:
>
> Thread 1: charger manager
> Thread 2: power supply driver, used by charger manager
>
> THREAD 1 (charger manager) THREAD 2 (power supply driver)
> ========================== ==============================
> psy = power_supply_get_by_name()
> Driver unbind, .remove
> power_supply_unregister()
> Device fully removed

[...]

> include/linux/mfd/abx500/ux500_chargalg.h | 11 +-
> include/linux/mfd/rt5033.h | 2 +-
> include/linux/mfd/wm8350/supply.h | 6 +-

Acked-by: Lee Jones <lee.jones@linaro.org>

--
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog


\
 
 \ /
  Last update: 2015-02-26 09:41    [W:0.125 / U:1.044 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site