public inbox for netdev@vger.kernel.org
 help / color / mirror / Atom feed
From: Menglong Dong <menglong.dong@linux.dev>
To: Menglong Dong <menglong8.dong@gmail.com>,
	Andrii Nakryiko <andrii.nakryiko@gmail.com>
Cc: ast@kernel.org, andrii@kernel.org, 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
Subject: Re: [PATCH bpf-next v9 01/11] bpf: add fsession support
Date: Wed, 14 Jan 2026 10:10:48 +0800	[thread overview]
Message-ID: <3026834.e9J7NaK4W3@7940hx> (raw)
In-Reply-To: <CAEf4Bzb+p4fXkCL01MVrvCwPvboeMWXgu4uTSMhweO_MYL+tqg@mail.gmail.com>

On 2026/1/14 09:22 Andrii Nakryiko <andrii.nakryiko@gmail.com> write:
> On Sat, Jan 10, 2026 at 6:11 AM Menglong Dong <menglong8.dong@gmail.com> wrote:
> >
> > The fsession is something that similar to kprobe session. It allow to
> > attach a single BPF program to both the entry and the exit of the target
> > functions.
> >
[...]
> > --- a/kernel/bpf/btf.c
> > +++ b/kernel/bpf/btf.c
> > @@ -6107,6 +6107,7 @@ static int btf_validate_prog_ctx_type(struct bpf_verifier_log *log, const struct
> >                 case BPF_TRACE_FENTRY:
> >                 case BPF_TRACE_FEXIT:
> >                 case BPF_MODIFY_RETURN:
> > +               case BPF_TRACE_FSESSION:
> >                         /* allow u64* as ctx */
> >                         if (btf_is_int(t) && t->size == 8)
> >                                 return 0;
> > @@ -6704,6 +6705,7 @@ bool btf_ctx_access(int off, int size, enum bpf_access_type type,
> >                         fallthrough;
> >                 case BPF_LSM_CGROUP:
> >                 case BPF_TRACE_FEXIT:
> > +               case BPF_TRACE_FSESSION:
> 
> According to the comment below we make this exception due to LSM.
> FSESSION won't be using FSESSION programs, no? So this is not
> necessary?

The comment describe the LSM case here, but the code
here is not only for LSM. It is also for FEXIT, which makes
sure that we can get the return value with "ctx[nr_args]".
So I think we still need it here, as we need to access the
return value with "ctx[nr_args]" too.

> 
> >                         /* When LSM programs are attached to void LSM hooks
> >                          * they use FEXIT trampolines and when attached to
> >                          * int LSM hooks, they use MODIFY_RETURN trampolines.
> 
> [...]
> 
> > @@ -4350,6 +4365,7 @@ attach_type_to_prog_type(enum bpf_attach_type attach_type)
> >         case BPF_TRACE_RAW_TP:
> >         case BPF_TRACE_FENTRY:
> >         case BPF_TRACE_FEXIT:
> > +       case BPF_TRACE_FSESSION:
> >         case BPF_MODIFY_RETURN:
> >                 return BPF_PROG_TYPE_TRACING;
> >         case BPF_LSM_MAC:
> > diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c
> > index 2a125d063e62..11e043049d68 100644
> > --- a/kernel/bpf/trampoline.c
> > +++ b/kernel/bpf/trampoline.c
> > @@ -111,7 +111,7 @@ bool bpf_prog_has_trampoline(const struct bpf_prog *prog)
> >
> >         return (ptype == BPF_PROG_TYPE_TRACING &&
> >                 (eatype == BPF_TRACE_FENTRY || eatype == BPF_TRACE_FEXIT ||
> > -                eatype == BPF_MODIFY_RETURN)) ||
> > +                eatype == BPF_MODIFY_RETURN || eatype == BPF_TRACE_FSESSION)) ||
> >                 (ptype == BPF_PROG_TYPE_LSM && eatype == BPF_LSM_MAC);
> 
> this is getting crazy, switch to the switch (lol) maybe?

ACK

> 
> >  }
> >
> > @@ -559,6 +559,8 @@ static enum bpf_tramp_prog_type bpf_attach_type_to_tramp(struct bpf_prog *prog)
> >                 return BPF_TRAMP_MODIFY_RETURN;
> >         case BPF_TRACE_FEXIT:
> >                 return BPF_TRAMP_FEXIT;
> > +       case BPF_TRACE_FSESSION:
> > +               return BPF_TRAMP_FSESSION;
> >         case BPF_LSM_MAC:
> >                 if (!prog->aux->attach_func_proto->type)
> >                         /* The function returns void, we cannot modify its
> > @@ -596,6 +598,8 @@ static int __bpf_trampoline_link_prog(struct bpf_tramp_link *link,
> >  {
> >         enum bpf_tramp_prog_type kind;
> >         struct bpf_tramp_link *link_exiting;
> > +       struct bpf_fsession_link *fslink;
> 
> initialize to NULL to avoid compiler (falsely, but still) complaining
> about potentially using uninitialized value

ACK

> 
> > +       struct hlist_head *prog_list;
> >         int err = 0;
> >         int cnt = 0, i;
> >
> 
> [...]
> 
> > -       hlist_add_head(&link->tramp_hlist, &tr->progs_hlist[kind]);
> > -       tr->progs_cnt[kind]++;
> > +       hlist_add_head(&link->tramp_hlist, prog_list);
> > +       if (kind == BPF_TRAMP_FSESSION) {
> > +               tr->progs_cnt[BPF_TRAMP_FENTRY]++;
> > +               fslink = container_of(link, struct bpf_fsession_link, link.link);
> > +               hlist_add_head(&fslink->fexit.tramp_hlist,
> > +                              &tr->progs_hlist[BPF_TRAMP_FEXIT]);
> 
> fits under 100 characters? keep on a single line then

ACK

> 
> > +               tr->progs_cnt[BPF_TRAMP_FEXIT]++;
> > +       } else {
> > +               tr->progs_cnt[kind]++;
> > +       }
> >         err = bpf_trampoline_update(tr, true /* lock_direct_mutex */);
> >         if (err) {
> >                 hlist_del_init(&link->tramp_hlist);
> > -               tr->progs_cnt[kind]--;
> > +               if (kind == BPF_TRAMP_FSESSION) {
> > +                       tr->progs_cnt[BPF_TRAMP_FENTRY]--;
> > +                       hlist_del_init(&fslink->fexit.tramp_hlist);
> > +                       tr->progs_cnt[BPF_TRAMP_FEXIT]--;
> > +               } else {
> > +                       tr->progs_cnt[kind]--;
> > +               }
> >         }
> >         return err;
> >  }
> > @@ -659,6 +683,7 @@ static int __bpf_trampoline_unlink_prog(struct bpf_tramp_link *link,
> >                                         struct bpf_trampoline *tr,
> >                                         struct bpf_prog *tgt_prog)
> >  {
> > +       struct bpf_fsession_link *fslink;
> 
> used in only one branch, move declaration there?

ACK

Thanks!
Menglong Dong

> 
> >         enum bpf_tramp_prog_type kind;
> >         int err;
> >
> > @@ -672,6 +697,11 @@ static int __bpf_trampoline_unlink_prog(struct bpf_tramp_link *link,
> >                 guard(mutex)(&tgt_prog->aux->ext_mutex);
> >                 tgt_prog->aux->is_extended = false;
> >                 return err;
> > +       } else if (kind == BPF_TRAMP_FSESSION) {
> > +               fslink = container_of(link, struct bpf_fsession_link, link.link);
> > +               hlist_del_init(&fslink->fexit.tramp_hlist);
> > +               tr->progs_cnt[BPF_TRAMP_FEXIT]--;
> > +               kind = BPF_TRAMP_FENTRY;
> >         }
> >         hlist_del_init(&link->tramp_hlist);
> >         tr->progs_cnt[kind]--;
> 
> [...]
> 





  reply	other threads:[~2026-01-14  2:11 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-10 14:11 [PATCH bpf-next v9 00/11] bpf: fsession support Menglong Dong
2026-01-10 14:11 ` [PATCH bpf-next v9 01/11] bpf: add " Menglong Dong
2026-01-14  1:22   ` Andrii Nakryiko
2026-01-14  2:10     ` Menglong Dong [this message]
2026-01-14 18:56       ` Andrii Nakryiko
2026-01-15  2:05         ` Menglong Dong
2026-01-15  8:33         ` Menglong Dong
2026-01-10 14:11 ` [PATCH bpf-next v9 02/11] bpf: use last 8-bits for the nr_args in trampoline Menglong Dong
2026-01-14  1:22   ` Andrii Nakryiko
2026-01-14  2:19     ` Menglong Dong
2026-01-14  9:52       ` David Laight
2026-01-10 14:11 ` [PATCH bpf-next v9 03/11] bpf: change prototype of bpf_session_{cookie,is_return} Menglong Dong
2026-01-14  1:22   ` Andrii Nakryiko
2026-01-14  2:19     ` Menglong Dong
2026-01-10 14:11 ` [PATCH bpf-next v9 04/11] bpf: support fsession for bpf_session_is_return Menglong Dong
2026-01-14  1:22   ` Andrii Nakryiko
2026-01-14  2:25     ` Menglong Dong
2026-01-10 14:11 ` [PATCH bpf-next v9 05/11] bpf: support fsession for bpf_session_cookie Menglong Dong
2026-01-10 14:42   ` bot+bpf-ci
2026-01-11  1:54     ` Menglong Dong
2026-01-14  1:22   ` Andrii Nakryiko
2026-01-14  2:33     ` Alexei Starovoitov
2026-01-14  2:38       ` Menglong Dong
2026-01-14  2:48     ` Menglong Dong
2026-01-10 14:11 ` [PATCH bpf-next v9 06/11] bpf,x86: introduce emit_store_stack_imm64() for trampoline Menglong Dong
2026-01-14  1:22   ` Andrii Nakryiko
2026-01-14  2:31     ` Menglong Dong
2026-01-10 14:11 ` [PATCH bpf-next v9 07/11] bpf,x86: add fsession support for x86_64 Menglong Dong
2026-01-14  1:25   ` Andrii Nakryiko
2026-01-14  3:27     ` Menglong Dong
2026-01-14  3:35       ` Menglong Dong
2026-01-14 19:05       ` Andrii Nakryiko
2026-01-15  2:12         ` Menglong Dong
2026-01-10 14:11 ` [PATCH bpf-next v9 08/11] libbpf: add fsession support Menglong Dong
2026-01-14  1:24   ` Andrii Nakryiko
2026-01-14  3:27     ` Menglong Dong
2026-01-10 14:11 ` [PATCH bpf-next v9 09/11] selftests/bpf: add testcases for fsession Menglong Dong
2026-01-10 14:11 ` [PATCH bpf-next v9 10/11] selftests/bpf: add testcases for fsession cookie Menglong Dong
2026-01-10 14:11 ` [PATCH bpf-next v9 11/11] selftests/bpf: test fsession mixed with fentry and fexit Menglong Dong
2026-01-14  2:28 ` [PATCH bpf-next v9 00/11] bpf: fsession support Alexei Starovoitov
2026-01-14  2:52   ` 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=3026834.e9J7NaK4W3@7940hx \
    --to=menglong.dong@linux.dev \
    --cc=andrii.nakryiko@gmail.com \
    --cc=andrii@kernel.org \
    --cc=ast@kernel.org \
    --cc=bp@alien8.de \
    --cc=bpf@vger.kernel.org \
    --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=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@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox