diff mbox series

[v8,bpf-next,6/7] bpf: allow for tailcalls in BPF subprograms for x64 JIT

Message ID 20200916211010.3685-7-maciej.fijalkowski@intel.com
State Superseded
Delegated to: BPF Maintainers
Headers show
Series None | expand

Commit Message

Maciej Fijalkowski Sept. 16, 2020, 9:10 p.m. UTC
Relax verifier's restriction that was meant to forbid tailcall usage
when subprog count was higher than 1.

Also, do not max out the stack depth of program that utilizes tailcalls.

Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
---
 kernel/bpf/verifier.c | 4 ++++
 1 file changed, 4 insertions(+)

Comments

Andrii Nakryiko Sept. 17, 2020, 9:03 p.m. UTC | #1
On Wed, Sep 16, 2020 at 3:54 PM Maciej Fijalkowski
<maciej.fijalkowski@intel.com> wrote:
>
> Relax verifier's restriction that was meant to forbid tailcall usage
> when subprog count was higher than 1.
>
> Also, do not max out the stack depth of program that utilizes tailcalls.
>
> Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
> ---

Maciej,

Only patches 6 and 7 arrived (a while ago) and seems like the other
patches are lost and not going to come. Do you mind resending entire
patch set?

[...]
Maciej Fijalkowski Sept. 17, 2020, 10:44 p.m. UTC | #2
On Thu, Sep 17, 2020 at 02:03:32PM -0700, Andrii Nakryiko wrote:
> On Wed, Sep 16, 2020 at 3:54 PM Maciej Fijalkowski
> <maciej.fijalkowski@intel.com> wrote:
> >
> > Relax verifier's restriction that was meant to forbid tailcall usage
> > when subprog count was higher than 1.
> >
> > Also, do not max out the stack depth of program that utilizes tailcalls.
> >
> > Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
> > ---
> 
> Maciej,
> 
> Only patches 6 and 7 arrived (a while ago) and seems like the other
> patches are lost and not going to come. Do you mind resending entire
> patch set?

Sure. Vger lately has been giving me a hard time, thought that maybe rest
of set would eventually arrive, similarly to what Toke experienced I
guess.

> 
> [...]
Alexei Starovoitov Sept. 17, 2020, 10:52 p.m. UTC | #3
On Thu, Sep 17, 2020 at 3:51 PM Maciej Fijalkowski
<maciej.fijalkowski@intel.com> wrote:
>
> On Thu, Sep 17, 2020 at 02:03:32PM -0700, Andrii Nakryiko wrote:
> > On Wed, Sep 16, 2020 at 3:54 PM Maciej Fijalkowski
> > <maciej.fijalkowski@intel.com> wrote:
> > >
> > > Relax verifier's restriction that was meant to forbid tailcall usage
> > > when subprog count was higher than 1.
> > >
> > > Also, do not max out the stack depth of program that utilizes tailcalls.
> > >
> > > Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.com>
> > > ---
> >
> > Maciej,
> >
> > Only patches 6 and 7 arrived (a while ago) and seems like the other
> > patches are lost and not going to come. Do you mind resending entire
> > patch set?
>
> Sure. Vger lately has been giving me a hard time, thought that maybe rest
> of set would eventually arrive, similarly to what Toke experienced I
> guess.

I've got the patches. No need to resend.
diff mbox series

Patch

diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
index 644ee9286ecf..05034cff89ca 100644
--- a/kernel/bpf/verifier.c
+++ b/kernel/bpf/verifier.c
@@ -4384,10 +4384,12 @@  static int check_map_func_compatibility(struct bpf_verifier_env *env,
 	case BPF_FUNC_tail_call:
 		if (map->map_type != BPF_MAP_TYPE_PROG_ARRAY)
 			goto error;
+#if !defined(CONFIG_X86_64) || !defined(CONFIG_BPF_JIT_ALWAYS_ON)
 		if (env->subprog_cnt > 1) {
 			verbose(env, "tail_calls are not allowed in programs with bpf-to-bpf calls\n");
 			return -EINVAL;
 		}
+#endif
 		break;
 	case BPF_FUNC_perf_event_read:
 	case BPF_FUNC_perf_event_output:
@@ -10633,7 +10635,9 @@  static int fixup_bpf_calls(struct bpf_verifier_env *env)
 			 * the program array.
 			 */
 			prog->cb_access = 1;
+#if !defined(CONFIG_X86_64) || !defined(CONFIG_BPF_JIT_ALWAYS_ON)
 			env->prog->aux->stack_depth = MAX_BPF_STACK;
+#endif
 			env->prog->aux->max_pkt_offset = MAX_PACKET_OFF;
 
 			/* mark bpf_tail_call as different opcode to avoid