On Sun, 30 Jan 2022 at 22:02, Daniel Lezcano <daniel.lezcano@xxxxxxxxxx> wrote:
When the node is virtual there is no release function associated which
can free the memory.
Free the memory when no 'ops' exists.
Signed-off-by: Daniel Lezcano <daniel.lezcano@xxxxxxxxxx>
---
drivers/powercap/dtpm.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/powercap/dtpm.c b/drivers/powercap/dtpm.c
index 0b0121c37a1b..7bddd25a6767 100644
--- a/drivers/powercap/dtpm.c
+++ b/drivers/powercap/dtpm.c
@@ -181,12 +181,12 @@ int dtpm_release_zone(struct powercap_zone *pcz)
if (dtpm->ops)
dtpm->ops->release(dtpm);
+ else
+ kfree(dtpm);
This doesn't look correct. Below you check dtpm against "root", which
may be after its memory has been freed.
If the ->release() function should be responsible for freeing the
dtpm, it needs to be called after the check below.
if (root == dtpm)
root = NULL;
- kfree(dtpm);
-
return 0;
}
Kind regards
Uffe