]> git.ipfire.org Git - thirdparty/linux.git/commit
bpf: Allow sleepable programs to use tail calls
authorJiri Olsa <jolsa@kernel.org>
Fri, 30 Jan 2026 08:12:07 +0000 (09:12 +0100)
committerAlexei Starovoitov <ast@kernel.org>
Fri, 30 Jan 2026 20:17:47 +0000 (12:17 -0800)
commit0f0c332992b8a5d2ae7b611b94c4e02ef8d54b97
treedf45b1b246a58df4e012be8b38710be9af468375
parent95dbe214b910fc80f0627e1760305cc0f472ff9f
bpf: Allow sleepable programs to use tail calls

Allowing sleepable programs to use tail calls.

Making sure we can't mix sleepable and non-sleepable bpf programs
in tail call map (BPF_MAP_TYPE_PROG_ARRAY) and allowing it to be
used in sleepable programs.

Sleepable programs can be preempted and sleep which might bring
new source of race conditions, but both direct and indirect tail
calls should not be affected.

Direct tail calls work by patching direct jump to callee into bpf
caller program, so no problem there. We atomically switch from nop
to jump instruction.

Indirect tail call reads the callee from the map and then jumps to
it. The callee bpf program can't disappear (be released) from the
caller, because it is executed under rcu lock (rcu_read_lock_trace).

Signed-off-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Leon Hwang <leon.hwang@linux.dev>
Link: https://lore.kernel.org/r/20260130081208.1130204-2-jolsa@kernel.org
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
include/linux/bpf.h
kernel/bpf/core.c
kernel/bpf/verifier.c