From: Martin KaFai Lau <martin.lau@linux.dev>
To: Eduard Zingerman <eddyz87@gmail.com>
Cc: bpf@vger.kernel.org, Alexei Starovoitov <ast@kernel.org>,
Andrii Nakryiko <andrii@kernel.org>,
Daniel Borkmann <daniel@iogearbox.net>,
Yonghong Song <yonghong.song@linux.dev>,
Amery Hung <ameryhung@gmail.com>,
kernel-team@meta.com
Subject: Re: [PATCH v5 bpf-next 2/9] bpf: Adjust BPF_JMP that jumps to the 1st insn of the prologue
Date: Thu, 29 Aug 2024 18:10:24 -0700 [thread overview]
Message-ID: <d7ca6398-43aa-499a-b9ae-6b6e00a7e72e@linux.dev> (raw)
In-Reply-To: <cdd2ea1421331cf27e5435ad60b7461936eceab2.camel@gmail.com>
On 8/29/24 5:47 PM, Eduard Zingerman wrote:
> On Thu, 2024-08-29 at 14:08 -0700, Martin KaFai Lau wrote:
>
> [...]
>
>> diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c
>> index 261849384ea8..03e974129c05 100644
>> --- a/kernel/bpf/verifier.c
>> +++ b/kernel/bpf/verifier.c
>> @@ -19286,6 +19286,9 @@ static int adjust_jmp_off(struct bpf_prog *prog, u32 tgt_idx, u32 delta)
>> for (i = 0; i < insn_cnt; i++, insn++) {
>> u8 code = insn->code;
>>
>> + if (tgt_idx <= i && i < tgt_idx + delta)
>> + continue;
>> +
>> if ((BPF_CLASS(code) != BPF_JMP && BPF_CLASS(code) != BPF_JMP32) ||
>> BPF_OP(code) == BPF_CALL || BPF_OP(code) == BPF_EXIT)
>> continue;
>> @@ -19704,6 +19707,9 @@ static int convert_ctx_accesses(struct bpf_verifier_env *env)
>> }
>> }
>>
>> + if (delta)
>> + WARN_ON(adjust_jmp_off(env->prog, 0, delta));
>
> Just noticed this.
> Suppose prologue is three instructions long and no epilogue,
> then cnt == 3 and delta == 2, adjust_jmp_off() would skip instructions
> in range [0..2), while inserted instructions range is [0..2].
> So, this would work only if the last statement in the prologue/epilogue
> generator is:
>
> *insn++ = prog->insnsi[0];
>
> which seems to be true for prologue generators in the tree,
> but looks a bit unintuitive...
Right, it is the current requirement/setup for the existing gen_prologue. It
should be obvious to spot if the gen_prologue does not do this and more unlikely
also somehow needs to jump back to itself.
Thanks for looking at the patches!
>
>> +
>> if (bpf_prog_is_offloaded(env->prog->aux))
>> return 0;
>>
>
>
next prev parent reply other threads:[~2024-08-30 1:10 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-08-29 21:08 [PATCH v5 bpf-next 0/9] bpf: Add gen_epilogue to bpf_verifier_ops Martin KaFai Lau
2024-08-29 21:08 ` [PATCH v5 bpf-next 1/9] bpf: Move insn_buf[16] to bpf_verifier_env Martin KaFai Lau
2024-08-29 21:08 ` [PATCH v5 bpf-next 2/9] bpf: Adjust BPF_JMP that jumps to the 1st insn of the prologue Martin KaFai Lau
2024-08-30 0:47 ` Eduard Zingerman
2024-08-30 1:10 ` Martin KaFai Lau [this message]
2024-08-29 21:08 ` [PATCH v5 bpf-next 3/9] bpf: Add gen_epilogue to bpf_verifier_ops Martin KaFai Lau
2024-08-29 21:08 ` [PATCH v5 bpf-next 4/9] bpf: Export bpf_base_func_proto Martin KaFai Lau
2024-08-29 21:08 ` [PATCH v5 bpf-next 5/9] selftests/bpf: attach struct_ops maps before test prog runs Martin KaFai Lau
2024-08-29 21:08 ` [PATCH v5 bpf-next 6/9] selftests/bpf: Test gen_prologue and gen_epilogue Martin KaFai Lau
2024-08-29 21:08 ` [PATCH v5 bpf-next 7/9] selftests/bpf: Add tailcall epilogue test Martin KaFai Lau
2024-08-29 21:08 ` [PATCH v5 bpf-next 8/9] selftests/bpf: A pro/epilogue test when the main prog jumps back to the 1st insn Martin KaFai Lau
2024-08-29 21:08 ` [PATCH v5 bpf-next 9/9] selftests/bpf: Test epilogue patching when the main prog has multiple BPF_EXIT Martin KaFai Lau
2024-08-30 1:30 ` [PATCH v5 bpf-next 0/9] bpf: Add gen_epilogue to bpf_verifier_ops patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d7ca6398-43aa-499a-b9ae-6b6e00a7e72e@linux.dev \
--to=martin.lau@linux.dev \
--cc=ameryhung@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=eddyz87@gmail.com \
--cc=kernel-team@meta.com \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.