From: Menglong Dong <menglong.dong@linux.dev>
To: menglong8.dong@gmail.com, ast@kernel.org, andrii@kernel.org,
bot+bpf-ci@kernel.org
Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com,
song@kernel.org, yonghong.song@linux.dev,
john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me,
haoluo@google.com, jolsa@kernel.org, davem@davemloft.net,
dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com,
jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com,
x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
ast@kernel.org, andrii@kernel.org, daniel@iogearbox.net,
martin.lau@kernel.org, eddyz87@gmail.com,
yonghong.song@linux.dev, clm@meta.com, ihor.solodrai@linux.dev
Subject: Re: [PATCH bpf-next v7 07/11] bpf,x86: add fsession support for x86_64
Date: Wed, 07 Jan 2026 15:55:52 +0800 [thread overview]
Message-ID: <3026409.e9J7NaK4W3@7940hx> (raw)
In-Reply-To: <598aec184ed820be7f244c2c14b1c0b75442e7567eb52abb15dd6875053c4958@mail.kernel.org>
On 2026/1/7 15:11 bot+bpf-ci@kernel.org write:
> > diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
> > index a87304161d45..32c13175bc65 100644
> > --- a/arch/x86/net/bpf_jit_comp.c
> > +++ b/arch/x86/net/bpf_jit_comp.c
> > @@ -3094,12 +3094,17 @@ static int emit_cond_near_jump(u8 **pprog, void *func, void *ip, u8 jmp_cond)
> > static int invoke_bpf(const struct btf_func_model *m, u8 **pprog,
> > struct bpf_tramp_links *tl, int stack_size,
> > int run_ctx_off, bool save_ret,
> > - void *image, void *rw_image)
> > + void *image, void *rw_image, u64 func_meta)
> > {
> > int i;
> > u8 *prog = *pprog;
> >
> > for (i = 0; i < tl->nr_links; i++) {
> > + if (tl->links[i]->link.prog->call_session_cookie) {
> > + /* 'stack_size + 8' is the offset of func_md in stack */
> > + emit_st_r0_imm64(&prog, func_meta, stack_size + 8);
> > + func_meta -= (1 << BPF_TRAMP_M_COOKIE);
> > + }
>
> This decrement of func_meta is problematic for fsession programs. When
> invoke_bpf() is called for fentry, func_meta gets decremented for each
> program with call_session_cookie. Later, when invoke_bpf() is called
> for fexit, it receives this already-decremented func_meta value.
>
> Since fsession programs appear in both fentry and fexit lists (same
> program object), call_session_cookie is true for both. The fexit part
> will see a different cookie offset than the fentry part saw.
>
> For example, with one fsession program:
> - fentry stores func_meta with cookie offset N, then decrements to N-1
> - fexit receives N-1, stores it, and the BPF program reads offset N-1
>
> Should the func_meta offset be reset for fexit so that each fsession
> program's fentry and fexit parts access the same cookie slot?
>
> [ ... ]
>
> > @@ -3383,9 +3395,19 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *rw_im
> > }
> > }
> >
> > + if (bpf_fsession_cnt(tlinks)) {
> > + /* clear all the session cookies' value */
> > + for (int i = 0; i < cookie_cnt; i++)
> > + emit_st_r0_imm64(&prog, 0, cookie_off - 8 * i);
> > + /* clear the return value to make sure fentry always get 0 */
> > + emit_st_r0_imm64(&prog, 0, 8);
> > + }
> > + func_meta = nr_regs + (((cookie_off - regs_off) / 8) << BPF_TRAMP_M_COOKIE);
> > +
> > if (fentry->nr_links) {
> > if (invoke_bpf(m, &prog, fentry, regs_off, run_ctx_off,
> > - flags & BPF_TRAMP_F_RET_FENTRY_RET, image, rw_image))
> > + flags & BPF_TRAMP_F_RET_FENTRY_RET, image, rw_image,
> > + func_meta))
> > return -EINVAL;
> > }
>
> [ ... ]
>
> > @@ -3445,9 +3467,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *rw_im
> > }
> > }
> >
> > + /* set the "is_return" flag for fsession */
> > + func_meta += (1 << BPF_TRAMP_M_IS_RETURN);
> > + if (bpf_fsession_cnt(tlinks))
> > + emit_st_r0_imm64(&prog, func_meta, nregs_off);
> > +
> > if (fexit->nr_links) {
> > if (invoke_bpf(m, &prog, fexit, regs_off, run_ctx_off,
> > - false, image, rw_image)) {
> > + false, image, rw_image, func_meta)) {
>
> At this point func_meta has already been decremented during the fentry
> invoke_bpf() call above. When invoke_bpf() processes the fexit list and
> encounters an fsession program (which has call_session_cookie set since
> it is the same program object), it will store this modified func_meta.
I think you misunderstand something. The "func_meta" that modified in
invoke_bpf() will not affect the value of "func_meta" here. We pass the value
of func_meta to invoke_bpf(), not the address.
This part should be OK, as it is covered by the selftests.
Thanks!
Menglong Dong
>
> The cookie offset encoded in func_meta will be different from what the
> fentry part stored, causing bpf_session_cookie() to return a pointer to
> a different memory location for fexit than for fentry.
>
> > + ret = -EINVAL;
> > + goto cleanup;
> > + }
>
>
> ---
> AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
> See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md
>
> CI run summary: https://github.com/kernel-patches/bpf/actions/runs/20773233136
>
next prev parent reply other threads:[~2026-01-07 7:56 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-07 6:43 [PATCH bpf-next v7 00/11] bpf: fsession support Menglong Dong
2026-01-07 6:43 ` [PATCH bpf-next v7 01/11] bpf: add " Menglong Dong
2026-01-07 6:43 ` [PATCH bpf-next v7 02/11] bpf: use last 8-bits for the nr_args in trampoline Menglong Dong
2026-01-07 7:11 ` bot+bpf-ci
2026-01-07 7:50 ` Menglong Dong
2026-01-07 6:43 ` [PATCH bpf-next v7 03/11] bpf: change prototype of bpf_session_{cookie,is_return} Menglong Dong
2026-01-07 6:43 ` [PATCH bpf-next v7 04/11] bpf: support fsession for bpf_session_is_return Menglong Dong
2026-01-07 7:11 ` bot+bpf-ci
2026-01-07 7:45 ` Menglong Dong
2026-01-07 6:43 ` [PATCH bpf-next v7 05/11] bpf: support fsession for bpf_session_cookie Menglong Dong
2026-01-07 6:43 ` [PATCH bpf-next v7 06/11] bpf,x86: introduce emit_st_r0_imm64() for trampoline Menglong Dong
2026-01-07 6:43 ` [PATCH bpf-next v7 07/11] bpf,x86: add fsession support for x86_64 Menglong Dong
2026-01-07 7:11 ` bot+bpf-ci
2026-01-07 7:55 ` Menglong Dong [this message]
2026-01-07 6:43 ` [PATCH bpf-next v7 08/11] libbpf: add fsession support Menglong Dong
2026-01-07 6:43 ` [PATCH bpf-next v7 09/11] selftests/bpf: add testcases for fsession Menglong Dong
2026-01-07 6:43 ` [PATCH bpf-next v7 10/11] selftests/bpf: add testcases for fsession cookie Menglong Dong
2026-01-07 6:43 ` [PATCH bpf-next v7 11/11] selftests/bpf: test fsession mixed with fentry and fexit Menglong Dong
2026-01-07 6:59 ` [PATCH bpf-next v7 00/11] bpf: fsession support Menglong Dong
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=3026409.e9J7NaK4W3@7940hx \
--to=menglong.dong@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bot+bpf-ci@kernel.org \
--cc=bp@alien8.de \
--cc=bpf@vger.kernel.org \
--cc=clm@meta.com \
--cc=daniel@iogearbox.net \
--cc=dave.hansen@linux.intel.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=eddyz87@gmail.com \
--cc=haoluo@google.com \
--cc=hpa@zytor.com \
--cc=ihor.solodrai@linux.dev \
--cc=jiang.biao@linux.dev \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=martin.lau@kernel.org \
--cc=martin.lau@linux.dev \
--cc=menglong8.dong@gmail.com \
--cc=mingo@redhat.com \
--cc=netdev@vger.kernel.org \
--cc=sdf@fomichev.me \
--cc=song@kernel.org \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--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.