]> www.infradead.org Git - nvme.git/commitdiff
ftrace: Free ftrace hashes after they are replaced in the subops code
authorSteven Rostedt <rostedt@goodmis.org>
Thu, 17 Apr 2025 17:59:39 +0000 (13:59 -0400)
committerSteven Rostedt (Google) <rostedt@goodmis.org>
Thu, 17 Apr 2025 19:16:07 +0000 (15:16 -0400)
The subops processing creates new hashes when adding and removing subops.
There were some places that the old hashes that were replaced were not
freed and this caused some memory leaks.

Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
Link: https://lore.kernel.org/20250417135939.245b128d@gandalf.local.home
Fixes: 0ae6b8ce200d ("ftrace: Fix accounting of subop hashes")
Signed-off-by: Steven Rostedt (Google) <rostedt@goodmis.org>
kernel/trace/ftrace.c

index d0e4a902bb4028222fdb88fc09dbaaaff8eb1d0a..41dcfcf8b40ae7866da115a0ecbdbfc5705cdb0d 100644 (file)
@@ -3609,6 +3609,9 @@ static int rebuild_hashes(struct ftrace_hash **filter_hash, struct ftrace_hash *
                        }
                }
 
+               free_ftrace_hash(temp_hash.filter_hash);
+               free_ftrace_hash(temp_hash.notrace_hash);
+
                temp_hash.filter_hash = *filter_hash;
                temp_hash.notrace_hash = *notrace_hash;
        }
@@ -3703,8 +3706,11 @@ static int ftrace_hash_move_and_update_subops(struct ftrace_ops *subops,
        }
 
        ret = rebuild_hashes(&filter_hash, &notrace_hash, ops);
-       if (!ret)
+       if (!ret) {
                ret = ftrace_update_ops(ops, filter_hash, notrace_hash);
+               free_ftrace_hash(filter_hash);
+               free_ftrace_hash(notrace_hash);
+       }
 
        if (ret) {
                /* Put back the original hash */