Commit 3ebc98c1 authored by Jiri Olsa's avatar Jiri Olsa Committed by Alexei Starovoitov
Browse files

ftrace: Add missing ftrace_lock to update_ftrace_direct_add/del



Ihor and Kumar reported splat from ftrace_get_addr_curr [1], which happened
because of the missing ftrace_lock in update_ftrace_direct_add/del functions
allowing concurrent access to ftrace internals.

The ftrace_update_ops function must be guarded by ftrace_lock, adding that.

Fixes: 05dc5e9c ("ftrace: Add update_ftrace_direct_add function")
Fixes: 8d2c1233 ("ftrace: Add update_ftrace_direct_del function")
Reported-by: default avatarIhor Solodrai <ihor.solodrai@linux.dev>
Reported-by: default avatarKumar Kartikeya Dwivedi <memxor@gmail.com>
Closes: https://lore.kernel.org/bpf/1b58ffb2-92ae-433a-ba46-95294d6edea2@linux.dev/


Tested-by: default avatarIhor Solodrai <ihor.solodrai@linux.dev>
Signed-off-by: default avatarJiri Olsa <jolsa@kernel.org>
Reviewed-by: default avatarSteven Rostedt (Google) <rostedt@goodmis.org>
Link: https://lore.kernel.org/r/20260302081622.165713-1-jolsa@kernel.org


Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent af4e9ef3
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -6404,6 +6404,7 @@ int update_ftrace_direct_add(struct ftrace_ops *ops, struct ftrace_hash *hash)
			new_filter_hash = old_filter_hash;
		}
	} else {
		guard(mutex)(&ftrace_lock);
		err = ftrace_update_ops(ops, new_filter_hash, EMPTY_HASH);
		/*
		 * new_filter_hash is dup-ed, so we need to release it anyway,
@@ -6530,6 +6531,7 @@ int update_ftrace_direct_del(struct ftrace_ops *ops, struct ftrace_hash *hash)
			ops->func_hash->filter_hash = NULL;
		}
	} else {
		guard(mutex)(&ftrace_lock);
		err = ftrace_update_ops(ops, new_filter_hash, EMPTY_HASH);
		/*
		 * new_filter_hash is dup-ed, so we need to release it anyway,