]> www.infradead.org Git - users/hch/misc.git/commitdiff
tracing: fprobe: Fix to remove recorded module addresses from filter
authorMasami Hiramatsu (Google) <mhiramat@kernel.org>
Wed, 24 Sep 2025 00:26:39 +0000 (09:26 +0900)
committerMasami Hiramatsu (Google) <mhiramat@kernel.org>
Wed, 24 Sep 2025 14:18:26 +0000 (23:18 +0900)
Even if there is a memory allocation failure in fprobe_addr_list_add(),
there is a partial list of module addresses. So remove the recorded
addresses from filter if exists.
This also removes the redundant ret local variable.

Fixes: a3dc2983ca7b ("tracing: fprobe: Cleanup fprobe hash when module unloading")
Signed-off-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Cc: stable@vger.kernel.org
Reviewed-by: Menglong Dong <menglong8.dong@gmail.com>
kernel/trace/fprobe.c

index c8034dfc1070d62f19b02b640ec89114f645fbc0..5a807d62e76dcec7883efa43a73b0c62ad71dba2 100644 (file)
@@ -428,8 +428,9 @@ static int fprobe_addr_list_add(struct fprobe_addr_list *alist, unsigned long ad
 {
        unsigned long *addrs;
 
-       if (alist->index >= alist->size)
-               return -ENOMEM;
+       /* Previously we failed to expand the list. */
+       if (alist->index == alist->size)
+               return -ENOSPC;
 
        alist->addrs[alist->index++] = addr;
        if (alist->index < alist->size)
@@ -489,7 +490,7 @@ static int fprobe_module_callback(struct notifier_block *nb,
        for (i = 0; i < FPROBE_IP_TABLE_SIZE; i++)
                fprobe_remove_node_in_module(mod, &fprobe_ip_table[i], &alist);
 
-       if (alist.index < alist.size && alist.index > 0)
+       if (alist.index > 0)
                ftrace_set_filter_ips(&fprobe_graph_ops.ops,
                                      alist.addrs, alist.index, 1, 0);
        mutex_unlock(&fprobe_mutex);