Commit 5b6dc659 authored by Wander Lairson Costa's avatar Wander Lairson Costa Committed by Tomas Glozar
Browse files

rtla/utils: Fix resource leak in set_comm_sched_attr()



The set_comm_sched_attr() function opens the /proc directory via
opendir() but fails to call closedir() on its successful exit path.
If the function iterates through all processes without error, it
returns 0 directly, leaking the DIR stream pointer.

Fix this by refactoring the function to use a single exit path. A
retval variable is introduced to track the success or failure status.
All exit points now jump to a unified out label that calls closedir()
before the function returns, ensuring the resource is always freed.

Fixes: dada03db ("rtla: Remove procps-ng dependency")
Signed-off-by: default avatarWander Lairson Costa <wander@redhat.com>
Link: https://lore.kernel.org/r/20260309195040.1019085-18-wander@redhat.com


Signed-off-by: default avatarTomas Glozar <tglozar@redhat.com>
parent 47dd74f6
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -390,22 +390,23 @@ int set_comm_sched_attr(const char *comm_prefix, struct sched_attr *attr)

		if (strtoi(proc_entry->d_name, &pid)) {
			err_msg("'%s' is not a valid pid", proc_entry->d_name);
			goto out_err;
			retval = 1;
			goto out;
		}
		/* procfs_is_workload_pid confirmed it is a pid */
		retval = __set_sched_attr(pid, attr);
		if (retval) {
			err_msg("Error setting sched attributes for pid:%s\n", proc_entry->d_name);
			goto out_err;
			goto out;
		}

		debug_msg("Set sched attributes for pid:%s\n", proc_entry->d_name);
	}
	return 0;

out_err:
	retval = 0;
out:
	closedir(procfs);
	return 1;
	return retval;
}

#define INVALID_VAL	(~0L)