Skip to content

Commit e25348c

Browse files
Malaya Kumar Routrafaeljw
authored andcommitted
PM: EM: Fix memory leak in em_create_pd() error path
When ida_alloc() fails in em_create_pd(), the function returns without freeing the previously allocated 'pd' structure, leading to a memory leak. The 'pd' pointer is allocated either at line 436 (for CPU devices with cpumask) or line 442 (for other devices) using kzalloc(). Additionally, the function incorrectly returns -ENOMEM when ida_alloc() fails, ignoring the actual error code returned by ida_alloc(), which can fail for reasons other than memory exhaustion. Fix both issues by: 1. Freeing the 'pd' structure with kfree() when ida_alloc() fails 2. Returning the actual error code from ida_alloc() instead of -ENOMEM This ensures proper cleanup on the error path and accurate error reporting. Fixes: cbe5aee ("PM: EM: Assign a unique ID when creating a performance domain") Signed-off-by: Malaya Kumar Rout <mrout@redhat.com> Reviewed-by: Changwoo Min <changwoo@igalia.com> Link: https://patch.msgid.link/20260105103730.65626-1-mrout@redhat.com Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent 54b603f commit e25348c

1 file changed

Lines changed: 4 additions & 2 deletions

File tree

kernel/power/energy_model.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -449,8 +449,10 @@ static int em_create_pd(struct device *dev, int nr_states,
449449
INIT_LIST_HEAD(&pd->node);
450450

451451
id = ida_alloc(&em_pd_ida, GFP_KERNEL);
452-
if (id < 0)
453-
return -ENOMEM;
452+
if (id < 0) {
453+
kfree(pd);
454+
return id;
455+
}
454456
pd->id = id;
455457

456458
em_table = em_table_alloc(pd);

0 commit comments

Comments
 (0)