Commit c539feff authored by Masami Hiramatsu (Google)'s avatar Masami Hiramatsu (Google)
Browse files

tracing: fprobe: Fix to remove recorded module addresses from filter



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: a3dc2983 ("tracing: fprobe: Cleanup fprobe hash when module unloading")
Signed-off-by: default avatarMasami Hiramatsu (Google) <mhiramat@kernel.org>
Cc: stable@vger.kernel.org
Reviewed-by: default avatarMenglong Dong <menglong8.dong@gmail.com>
parent dc3382ff
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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);