Commit 9325d53f authored by Alexei Starovoitov's avatar Alexei Starovoitov
Browse files

Merge branch 's390-bpf-remove-the-orig_call-null-check'

Ilya Leoshkevich says:

====================
I've been looking at fixing the tailcall_bpf2bpf_hierarchy failures on
s390. One of the challenges is that when a BPF trampoline calls a BPF
prog A, the prologue of A sets the tail call count to 0. Therefore it
would be useful to know whether the trampoline is attached to some
other BPF prog B, in which case A should be called using an offset
equal to tail_call_start, bypassing the tail call count initialization.

The trampoline attachment point is passed to trampoline functions via
the orig_call variable. Unfortunately in the case of calculating the
size of a struct_ops trampoline it's NULL, and I could not think of a
good reason to have it this way. This series makes it always non-NULL.
====================

Link: https://patch.msgid.link/20250512221911.61314-1-iii@linux.ibm.com


Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parents 5f55f216 8e57cf09
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -2583,9 +2583,8 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im,
	if (nr_stack_args > MAX_NR_STACK_ARGS)
		return -ENOTSUPP;

	/* Return to %r14, since func_addr and %r0 are not available. */
	if ((!func_addr && !(flags & BPF_TRAMP_F_ORIG_STACK)) ||
	    (flags & BPF_TRAMP_F_INDIRECT))
	/* Return to %r14 in the struct_ops case. */
	if (flags & BPF_TRAMP_F_INDIRECT)
		flags |= BPF_TRAMP_F_SKIP_FRAME;

	/*
+1 −1
Original line number Diff line number Diff line
@@ -601,7 +601,7 @@ int bpf_struct_ops_prepare_trampoline(struct bpf_tramp_links *tlinks,
	if (model->ret_size > 0)
		flags |= BPF_TRAMP_F_RET_FENTRY_RET;

	size = arch_bpf_trampoline_size(model, flags, tlinks, NULL);
	size = arch_bpf_trampoline_size(model, flags, tlinks, stub_func);
	if (size <= 0)
		return size ? : -EFAULT;