Commit e25348c5 authored by Malaya Kumar Rout's avatar Malaya Kumar Rout Committed by Rafael J. Wysocki
Browse files

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: cbe5aeed ("PM: EM: Assign a unique ID when creating a performance domain")
Signed-off-by: default avatarMalaya Kumar Rout <mrout@redhat.com>
Reviewed-by: default avatarChangwoo Min <changwoo@igalia.com>
Link: https://patch.msgid.link/20260105103730.65626-1-mrout@redhat.com


Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 54b603f2
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -449,8 +449,10 @@ static int em_create_pd(struct device *dev, int nr_states,
	INIT_LIST_HEAD(&pd->node);

	id = ida_alloc(&em_pd_ida, GFP_KERNEL);
	if (id < 0)
		return -ENOMEM;
	if (id < 0) {
		kfree(pd);
		return id;
	}
	pd->id = id;

	em_table = em_table_alloc(pd);