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: dada03db9bb19 ("rtla: Remove procps-ng dependency")
Signed-off-by: Wander Lairson Costa <[email protected]>
---
 tools/tracing/rtla/src/utils.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/tools/tracing/rtla/src/utils.c b/tools/tracing/rtla/src/utils.c
index b029fe5970c31..1ea9980d8ecd3 100644
--- a/tools/tracing/rtla/src/utils.c
+++ b/tools/tracing/rtla/src/utils.c
@@ -362,22 +362,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)
-- 
2.52.0


Reply via email to