From nobody Sun Feb 8 12:14:21 2026 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 77E03346794 for ; Sat, 10 Jan 2026 14:11:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054304; cv=none; b=QN03yPfzHE/HwiIg9KA0M9KfC91KGCngGyFMGaR5cEr+kmSA9Kfo4XuKK3YPsHyS4adKfbnJd+rLPZZwhlFyi0fmGNAnKSJjy329hMmZwSpHumJJ3fpPBV56OX9RyEBhz8f5UPAwvfjR9rULkCwr0fp60uQn94AlJU4kw6urzWs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054304; c=relaxed/simple; bh=VH19+bgFV1Ar6zkGFMkPmgaENggN19J/WBKWnJQlIEA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CBc8Acdkr9U+jgdvbb8Is2CuxptaFZq04xhIIcNKgQdHiy/nDHiemTspi+RkfsbnutWldKlfJxSlG3EZsW3hH1yBBSiYKm98cSpVTDTTD7fVxP8v6RH8n/gkra0s8ak8s3YYBgp3qWzQl2Eow/M1q7bycuI/HT6xvzfIXdD/Acw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=kVdQ8DQk; arc=none smtp.client-ip=209.85.210.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="kVdQ8DQk" Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-81e7477828bso722869b3a.0 for ; Sat, 10 Jan 2026 06:11:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054302; x=1768659102; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FoUpDl8ePvedaTbwb3CC+oM/qrK1PAmOwF480RyM+do=; b=kVdQ8DQkeGaWIdzGtq0kJuVE1Uf+wWjqMVFtEyELRXg3+wIel24Tv1FNMqoeHYc3nt yDH0Jy0Z6slJUgaOGHVYru5fvyC0zlDh/GYtjzocmlSQCd4tq9ncb4mJ6OrshpM0b5aj PComKInq2GUC73zrXyDiWMZNjCp/NY1l2lxUSyKAoeYe+YSz2sPqncjRaKdBSBuK6e+N LjLPmyLW+l3pSjhDOpCDXEfhTu1hA1CR0X6E0Y2lnJlwzh3eS7IeXXTncKVVFDwOShSG ZV1L7x5V4fV3ktxzTHeNpu78+1tAJ/7L3JsTKboZMy+YPlN3lZA5/YSZSeQ6LhAGyuln PShg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054302; x=1768659102; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=FoUpDl8ePvedaTbwb3CC+oM/qrK1PAmOwF480RyM+do=; b=dttAZ3nNgcEx/2zAQPUwXVuorONpY34zh7jKTp53Egh8opiTZQwsoENl2j4fkz0tyu e2LQaSFi7rdhrhDhsWG9Ge2FeCFH2piqcfNzEBhpMbRlri4iIIvw0iv1WbRJX9XHLcXx 65Ui2SS07aYBBFqEi7hW0Q+AmHMSwU6T78i9nWnRQltzgFYLoePtFHaOjXDDR9ey1P3f Ki9xoz0sBDc5OW7HeT8cz6VlUUisWp+PwGD0L6tOTLhs824wDD3HJjF2n72opjD0pv/Z mq8ar0x2Bhzr84yEi3bLyv6fNwYfuGt9RRSG7gxH4f86F0izpr9ogiM1OMGQkhpRDzcC nC1g== X-Forwarded-Encrypted: i=1; AJvYcCVnTU+WX72aX53fsBmdm5UHnXktyqN0T1W6w6BwTPpPtW6ouNqikdD3qe+TT1ZV5GXh6J9pXxpbe7C1DhI=@vger.kernel.org X-Gm-Message-State: AOJu0YygnfSAlCFK+0fYA/fn9uhfLUxFyKGWXBS5awXvvtr2N6GUuV0D 1VpCFEP4XJYiPPXAFVGeVjtF+Vq4Y5QtonzBUxxtjmaoCfZyDXmjffug X-Gm-Gg: AY/fxX711EuR8m89S7SikerKLrJUR9gkJdn69I3wiLafzwnBArHLWtbfd9t+nGsSrli 07SzKWZcqUMrpRI32zg+VTXBNvP/d+gj7iknZWjW03kWw3BRAVMK1VW5BZ2B6cMHapMoWJWKmwL agH+GAGfjDyzzDDSM3TKT4lbwXVXUbhpAUQpmyQeYAuN6a0e5f1NJobdEjzhSH5nl1iDBGlu2H1 TMHuclOmbIguzdSa+Xm7AW7UmrN9clB+BggmCUelDItwWZhYQgSV7LL1Z0rQrw0i+PDwgPiD7XM MtxN07mz+9qbKz7GjVmcUV3jVBQgHpYhnjfsS8T0mMbysfL45Wd7vnJpfYPq0gP5Y5AxJUDSTM+ YKu4oBHc9WDl4ZR/yNWPLKKfPBBCHXTyDkiSCp2lg2vvvlxt5aEBwE1jc/MHNlps5mmAsFJP1kA ISF7Es1j8= X-Google-Smtp-Source: AGHT+IFchn3vv4AXAW8p/IBP4WwVrRDjHD5nQ2TdcS0MlwipWYPRjwHBEH4i3nmffgXcqFatnQoJRg== X-Received: by 2002:a05:6a00:1bc5:b0:81e:2923:9e63 with SMTP id d2e1a72fcca58-81e2923a134mr5390125b3a.27.1768054301724; Sat, 10 Jan 2026 06:11:41 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.11.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:11:41 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 01/11] bpf: add fsession support Date: Sat, 10 Jan 2026 22:11:05 +0800 Message-ID: <20260110141115.537055-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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. Introduce the struct bpf_fsession_link, which allows to add the link to both the fentry and fexit progs_hlist of the trampoline. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v5: - unify the name to "fsession" - use more explicit way in __bpf_trampoline_link_prog() v4: - instead of adding a new hlist to progs_hlist in trampoline, add the bpf program to both the fentry hlist and the fexit hlist. --- include/linux/bpf.h | 19 +++++++++ include/uapi/linux/bpf.h | 1 + kernel/bpf/btf.c | 2 + kernel/bpf/syscall.c | 18 ++++++++- kernel/bpf/trampoline.c | 40 ++++++++++++++++--- kernel/bpf/verifier.c | 12 ++++-- net/bpf/test_run.c | 1 + net/core/bpf_sk_storage.c | 1 + tools/include/uapi/linux/bpf.h | 1 + .../bpf/prog_tests/tracing_failure.c | 2 +- 10 files changed, 87 insertions(+), 10 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 5936f8e2996f..41228b0add52 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1309,6 +1309,7 @@ enum bpf_tramp_prog_type { BPF_TRAMP_MODIFY_RETURN, BPF_TRAMP_MAX, BPF_TRAMP_REPLACE, /* more than MAX */ + BPF_TRAMP_FSESSION, }; =20 struct bpf_tramp_image { @@ -1875,6 +1876,11 @@ struct bpf_tracing_link { struct bpf_prog *tgt_prog; }; =20 +struct bpf_fsession_link { + struct bpf_tracing_link link; + struct bpf_tramp_link fexit; +}; + struct bpf_raw_tp_link { struct bpf_link link; struct bpf_raw_event_map *btp; @@ -2169,6 +2175,19 @@ static inline void bpf_struct_ops_desc_release(struc= t bpf_struct_ops_desc *st_op =20 #endif =20 +static inline int bpf_fsession_cnt(struct bpf_tramp_links *links) +{ + struct bpf_tramp_links fentries =3D links[BPF_TRAMP_FENTRY]; + int cnt =3D 0; + + for (int i =3D 0; i < links[BPF_TRAMP_FENTRY].nr_links; i++) { + if (fentries.links[i]->link.prog->expected_attach_type =3D=3D BPF_TRACE_= FSESSION) + cnt++; + } + + return cnt; +} + int bpf_prog_ctx_arg_info_init(struct bpf_prog *prog, const struct bpf_ctx_arg_aux *info, u32 cnt); =20 diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 2a2ade4be60f..44e7dbc278e3 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 539c9fdea41d..8b1dcd440356 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -6107,6 +6107,7 @@ static int btf_validate_prog_ctx_type(struct bpf_veri= fier_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 =3D=3D 8) return 0; @@ -6704,6 +6705,7 @@ bool btf_ctx_access(int off, int size, enum bpf_acces= s_type type, fallthrough; case BPF_LSM_CGROUP: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: /* 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. diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index ecc0929ce462..c65e7a70cb78 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -3577,6 +3577,7 @@ static int bpf_tracing_prog_attach(struct bpf_prog *p= rog, case BPF_PROG_TYPE_TRACING: if (prog->expected_attach_type !=3D BPF_TRACE_FENTRY && prog->expected_attach_type !=3D BPF_TRACE_FEXIT && + prog->expected_attach_type !=3D BPF_TRACE_FSESSION && prog->expected_attach_type !=3D BPF_MODIFY_RETURN) { err =3D -EINVAL; goto out_put_prog; @@ -3626,7 +3627,21 @@ static int bpf_tracing_prog_attach(struct bpf_prog *= prog, key =3D bpf_trampoline_compute_key(tgt_prog, NULL, btf_id); } =20 - link =3D kzalloc(sizeof(*link), GFP_USER); + if (prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + struct bpf_fsession_link *fslink; + + fslink =3D kzalloc(sizeof(*fslink), GFP_USER); + if (fslink) { + bpf_link_init(&fslink->fexit.link, BPF_LINK_TYPE_TRACING, + &bpf_tracing_link_lops, prog, attach_type); + fslink->fexit.cookie =3D bpf_cookie; + link =3D &fslink->link; + } else { + link =3D NULL; + } + } else { + link =3D kzalloc(sizeof(*link), GFP_USER); + } if (!link) { err =3D -ENOMEM; goto out_put_prog; @@ -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 *pro= g) =20 return (ptype =3D=3D BPF_PROG_TYPE_TRACING && (eatype =3D=3D BPF_TRACE_FENTRY || eatype =3D=3D BPF_TRACE_FEXIT || - eatype =3D=3D BPF_MODIFY_RETURN)) || + eatype =3D=3D BPF_MODIFY_RETURN || eatype =3D=3D BPF_TRACE_FSESSION)) || (ptype =3D=3D BPF_PROG_TYPE_LSM && eatype =3D=3D BPF_LSM_MAC); } =20 @@ -559,6 +559,8 @@ static enum bpf_tramp_prog_type bpf_attach_type_to_tram= p(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; + struct hlist_head *prog_list; int err =3D 0; int cnt =3D 0, i; =20 @@ -621,24 +625,44 @@ static int __bpf_trampoline_link_prog(struct bpf_tram= p_link *link, BPF_MOD_JUMP, NULL, link->link.prog->bpf_func); } + if (kind =3D=3D BPF_TRAMP_FSESSION) { + prog_list =3D &tr->progs_hlist[BPF_TRAMP_FENTRY]; + cnt++; + } else { + prog_list =3D &tr->progs_hlist[kind]; + } if (cnt >=3D BPF_MAX_TRAMP_LINKS) return -E2BIG; if (!hlist_unhashed(&link->tramp_hlist)) /* prog already linked */ return -EBUSY; - hlist_for_each_entry(link_exiting, &tr->progs_hlist[kind], tramp_hlist) { + hlist_for_each_entry(link_exiting, prog_list, tramp_hlist) { if (link_exiting->link.prog !=3D link->link.prog) continue; /* prog already linked */ return -EBUSY; } =20 - hlist_add_head(&link->tramp_hlist, &tr->progs_hlist[kind]); - tr->progs_cnt[kind]++; + hlist_add_head(&link->tramp_hlist, prog_list); + if (kind =3D=3D BPF_TRAMP_FSESSION) { + tr->progs_cnt[BPF_TRAMP_FENTRY]++; + fslink =3D container_of(link, struct bpf_fsession_link, link.link); + hlist_add_head(&fslink->fexit.tramp_hlist, + &tr->progs_hlist[BPF_TRAMP_FEXIT]); + tr->progs_cnt[BPF_TRAMP_FEXIT]++; + } else { + tr->progs_cnt[kind]++; + } err =3D bpf_trampoline_update(tr, true /* lock_direct_mutex */); if (err) { hlist_del_init(&link->tramp_hlist); - tr->progs_cnt[kind]--; + if (kind =3D=3D 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_tram= p_link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog) { + struct bpf_fsession_link *fslink; enum bpf_tramp_prog_type kind; int err; =20 @@ -672,6 +697,11 @@ static int __bpf_trampoline_unlink_prog(struct bpf_tra= mp_link *link, guard(mutex)(&tgt_prog->aux->ext_mutex); tgt_prog->aux->is_extended =3D false; return err; + } else if (kind =3D=3D BPF_TRAMP_FSESSION) { + fslink =3D container_of(link, struct bpf_fsession_link, link.link); + hlist_del_init(&fslink->fexit.tramp_hlist); + tr->progs_cnt[BPF_TRAMP_FEXIT]--; + kind =3D BPF_TRAMP_FENTRY; } hlist_del_init(&link->tramp_hlist); tr->progs_cnt[kind]--; diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 53635ea2e41b..774c9b0aafa3 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -17403,6 +17403,7 @@ static int check_return_code(struct bpf_verifier_en= v *env, int regno, const char switch (env->prog->expected_attach_type) { case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: range =3D retval_range(0, 0); break; case BPF_TRACE_RAW_TP: @@ -23300,6 +23301,7 @@ static int do_misc_fixups(struct bpf_verifier_env *= env) if (prog_type =3D=3D BPF_PROG_TYPE_TRACING && insn->imm =3D=3D BPF_FUNC_get_func_ret) { if (eatype =3D=3D BPF_TRACE_FEXIT || + eatype =3D=3D BPF_TRACE_FSESSION || eatype =3D=3D BPF_MODIFY_RETURN) { /* Load nr_args from ctx - 8 */ insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); @@ -24244,7 +24246,8 @@ int bpf_check_attach_target(struct bpf_verifier_log= *log, if (tgt_prog->type =3D=3D BPF_PROG_TYPE_TRACING && prog_extension && (tgt_prog->expected_attach_type =3D=3D BPF_TRACE_FENTRY || - tgt_prog->expected_attach_type =3D=3D BPF_TRACE_FEXIT)) { + tgt_prog->expected_attach_type =3D=3D BPF_TRACE_FEXIT || + tgt_prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION)) { /* Program extensions can extend all program types * except fentry/fexit. The reason is the following. * The fentry/fexit programs are used for performance @@ -24259,7 +24262,7 @@ int bpf_check_attach_target(struct bpf_verifier_log= *log, * beyond reasonable stack size. Hence extending fentry * is not allowed. */ - bpf_log(log, "Cannot extend fentry/fexit\n"); + bpf_log(log, "Cannot extend fentry/fexit/fsession\n"); return -EINVAL; } } else { @@ -24343,6 +24346,7 @@ int bpf_check_attach_target(struct bpf_verifier_log= *log, case BPF_LSM_CGROUP: case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: if (!btf_type_is_func(t)) { bpf_log(log, "attach_btf_id %u is not a function\n", btf_id); @@ -24509,6 +24513,7 @@ static bool can_be_sleepable(struct bpf_prog *prog) case BPF_TRACE_FEXIT: case BPF_MODIFY_RETURN: case BPF_TRACE_ITER: + case BPF_TRACE_FSESSION: return true; default: return false; @@ -24590,9 +24595,10 @@ static int check_attach_btf_id(struct bpf_verifier= _env *env) tgt_info.tgt_name); return -EINVAL; } else if ((prog->expected_attach_type =3D=3D BPF_TRACE_FEXIT || + prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION || prog->expected_attach_type =3D=3D BPF_MODIFY_RETURN) && btf_id_set_contains(&noreturn_deny, btf_id)) { - verbose(env, "Attaching fexit/fmod_ret to __noreturn function '%s' is re= jected.\n", + verbose(env, "Attaching fexit/fsession/fmod_ret to __noreturn function '= %s' is rejected.\n", tgt_info.tgt_name); return -EINVAL; } diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c index 655efac6f133..3b0d9bd039de 100644 --- a/net/bpf/test_run.c +++ b/net/bpf/test_run.c @@ -685,6 +685,7 @@ int bpf_prog_test_run_tracing(struct bpf_prog *prog, switch (prog->expected_attach_type) { case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: if (bpf_fentry_test1(1) !=3D 2 || bpf_fentry_test2(2, 3) !=3D 5 || bpf_fentry_test3(4, 5, 6) !=3D 15 || diff --git a/net/core/bpf_sk_storage.c b/net/core/bpf_sk_storage.c index 850dd736ccd1..de111818f3a0 100644 --- a/net/core/bpf_sk_storage.c +++ b/net/core/bpf_sk_storage.c @@ -365,6 +365,7 @@ static bool bpf_sk_storage_tracing_allowed(const struct= bpf_prog *prog) return true; case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: return !!strncmp(prog->aux->attach_func_name, "bpf_sk_storage", strlen("bpf_sk_storage")); default: diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index b816bc53d2e1..3ca7d76e05f0 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/tools/testing/selftests/bpf/prog_tests/tracing_failure.c b/too= ls/testing/selftests/bpf/prog_tests/tracing_failure.c index 10e231965589..f9f9e1cb87bf 100644 --- a/tools/testing/selftests/bpf/prog_tests/tracing_failure.c +++ b/tools/testing/selftests/bpf/prog_tests/tracing_failure.c @@ -73,7 +73,7 @@ static void test_tracing_deny(void) static void test_fexit_noreturns(void) { test_tracing_fail_prog("fexit_noreturns", - "Attaching fexit/fmod_ret to __noreturn function 'do_exit' is re= jected."); + "Attaching fexit/fsession/fmod_ret to __noreturn function 'do_ex= it' is rejected."); } =20 void test_tracing_failure(void) --=20 2.52.0 From nobody Sun Feb 8 12:14:21 2026 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73122346797 for ; Sat, 10 Jan 2026 14:11:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054313; cv=none; b=lxorVyfqmFHAstM1SxVVwvEFSZlwljBJ2nsOH5dGXtUKWqY0rj8Pof5liKZW6b419dgLJklRfNMA0tR9JtJBKeKfDLJuhDZaA+tbWpR5mtEzDFARFalmpJefrSX0/Pa8zCRbzGkBLXcdADa5hTvRM3OnN0Hayit96w4tkMBr5FI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054313; c=relaxed/simple; bh=VhBBi66SFeKXbV7OJrrw4WoyPdDGNe3BKHOh9sdreXY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qAvsK9ByA6sKOeRNGLnaGNlYHqox01N1NEiM0Hibet24AbqvOwoi/OHJ1ik6iZpKo5XS2tbfucndMnc4JAi/KO7jsKPN9OEgM7whrzd2IXSTmlKvYCagPPOJRV7yaGqFOjtCN+rnR8kKRzhQPaepD4+naNqgChMcq45bP2DksUw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ajndF/ju; arc=none smtp.client-ip=209.85.210.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ajndF/ju" Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-81ef4b87291so436993b3a.0 for ; Sat, 10 Jan 2026 06:11:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054312; x=1768659112; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rjkgpIcKhjQZAa0EelYk21O9foZl8TfKrOJc4gFivFo=; b=ajndF/juubjoXgwPw1K/ojOEDD0b+S/fG1O6tRtBcbyT2GoMRVvgCZwVkVlrD7xeCj Vol8PTdD13a+ZR5VE3wjMQ2b8H+qGVpJw+gx5O0ooLNmg8/d90atIunlRyOQ0RYpq3dA KDu01ut0hybmtRbKy3knnl4NgfqpGz3cbvKc9C/5Uw1ezeQe1Oy5zwdmh9PqiuTl3Tqa xg3bUqI6nTh1dwNfTdg9M5Z41dPNUgEBKl/zv7OzJ4qrmSwI0UQjeaz0BHiS5feKEcPK AIHArv0dnkviIflK/1UlRZu+e1IJB02MxG29wVXPcvSWV4tOyfrXQ2YU1N91AeXG2/w9 /06A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054312; x=1768659112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=rjkgpIcKhjQZAa0EelYk21O9foZl8TfKrOJc4gFivFo=; b=lNo9Ipw+k40TuVguTL8aNzfAIsNpd+19zOSWHjdMwKjmu0wdYBTlW3erXr/2+XlaLs 9tH7i+ITcjbcgTo+/BkU+ZVvUWX4CHP6W1oESpB7jC3TtuEQzd9LWxembDC+XqxO/OCZ 7MbqjIVf6NqVCsfvgO7FPzDkZe0ENPPlI+TG7EBZplaU+J4RlnbvNPzZad+ThYDKj8S5 v52l+JIcQTH3P0QUtLLDzEs0Mgc0TX9mfg8dPW5bqsPCmU080SGgYcJdW8cRBV/0K9Hq MKjzoPG6ionhBvnQUllSuG4tGkSombUoySH/O5R7tE+y3S0eao8DyR7VnILcKfxDvTCm Z/Ww== X-Forwarded-Encrypted: i=1; AJvYcCXQObJqNlM8tLJrJPmmEqE4toJG2KUJIjuCkutCy6IYty0fwatv1qNEVMDjmzuzKKPIQF1QwxjNSXF/gs8=@vger.kernel.org X-Gm-Message-State: AOJu0YxJq/TUf9LThqpmELdE9MbpzAH/Rv9GrmoxGQV72VSrilx1o2m0 +K5JvRfumSRWXhs1v0xgyq5glZObOQtlezzJeqLpk09687PFnRafLyUG X-Gm-Gg: AY/fxX7l1MD2vvTJV4IvBA1iytD1okj3OK8p+DMkOAWTuVu6lweBRUoLNak0QjupG/7 KRYJwbtrJcazCLP3lLHgpVEwousKENWegzJFBCSm/wgDTqDO7f10UKd/BXYFcl33p8nyDSb3ANZ 2PqBfQbY2bSnGQ+asukwD/wnyCy0SSXWaV+N5Tm+PE+rhPdxWzmKFavxElKR26VVMiCODsAUNC9 /7Pz6qmYtEruOnWDLFMK7zL26LdbgnqrO2lhIFRPkcA6B7dtJUIpjpJUJnh3kfwNLsjON/eOmNz KS7m/d2TsImCd0JskPhQnA9TTm5mZsIBk27/Z4HLuRdiWgCW4yXV8zmkFkWoXXWAmeMZck1A8TJ kKi8HhcJp4UICX67WVfYQELbs4c8Fs6JJMytRSQWITWWauWQ2VuxvKkXlh4cwGWVNfDdinsddsY wvwbmcaoI= X-Google-Smtp-Source: AGHT+IF03SXJV4ZyzcbP2okOtd6Y9ZpGDEo0yivf5cl39rEI0EE+f2l48zo7+Cf6AdRAzuVFCKfH5g== X-Received: by 2002:a05:6a00:2f50:b0:81c:717b:9d3b with SMTP id d2e1a72fcca58-81c717ba569mr6481986b3a.47.1768054311673; Sat, 10 Jan 2026 06:11:51 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.11.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:11:51 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 02/11] bpf: use last 8-bits for the nr_args in trampoline Date: Sat, 10 Jan 2026 22:11:06 +0800 Message-ID: <20260110141115.537055-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For now, ctx[-1] is used to store the nr_args in the trampoline. However, 1-byte is enough to store such information. Therefore, we use only the last byte of ctx[-1] to store the nr_args, and reserve the rest for other usages. Signed-off-by: Menglong Dong --- v8: - fix the missed get_func_arg_cnt --- kernel/bpf/verifier.c | 35 +++++++++++++++++++---------------- kernel/trace/bpf_trace.c | 6 +++--- 2 files changed, 22 insertions(+), 19 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 774c9b0aafa3..bfff3f84fd91 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -23277,15 +23277,16 @@ static int do_misc_fixups(struct bpf_verifier_env= *env) insn->imm =3D=3D BPF_FUNC_get_func_arg) { /* Load nr_args from ctx - 8 */ insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); - insn_buf[1] =3D BPF_JMP32_REG(BPF_JGE, BPF_REG_2, BPF_REG_0, 6); - insn_buf[2] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 3); - insn_buf[3] =3D BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_1); - insn_buf[4] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_2, 0); - insn_buf[5] =3D BPF_STX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, 0); - insn_buf[6] =3D BPF_MOV64_IMM(BPF_REG_0, 0); - insn_buf[7] =3D BPF_JMP_A(1); - insn_buf[8] =3D BPF_MOV64_IMM(BPF_REG_0, -EINVAL); - cnt =3D 9; + insn_buf[1] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFF); + insn_buf[2] =3D BPF_JMP32_REG(BPF_JGE, BPF_REG_2, BPF_REG_0, 6); + insn_buf[3] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 3); + insn_buf[4] =3D BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_1); + insn_buf[5] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_2, 0); + insn_buf[6] =3D BPF_STX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, 0); + insn_buf[7] =3D BPF_MOV64_IMM(BPF_REG_0, 0); + insn_buf[8] =3D BPF_JMP_A(1); + insn_buf[9] =3D BPF_MOV64_IMM(BPF_REG_0, -EINVAL); + cnt =3D 10; =20 new_prog =3D bpf_patch_insn_data(env, i + delta, insn_buf, cnt); if (!new_prog) @@ -23305,12 +23306,13 @@ static int do_misc_fixups(struct bpf_verifier_env= *env) eatype =3D=3D BPF_MODIFY_RETURN) { /* Load nr_args from ctx - 8 */ insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); - insn_buf[1] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3); - insn_buf[2] =3D BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1); - insn_buf[3] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, 0); - insn_buf[4] =3D BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, 0); - insn_buf[5] =3D BPF_MOV64_IMM(BPF_REG_0, 0); - cnt =3D 6; + insn_buf[1] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFF); + insn_buf[2] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3); + insn_buf[3] =3D BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1); + insn_buf[4] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, 0); + insn_buf[5] =3D BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, 0); + insn_buf[6] =3D BPF_MOV64_IMM(BPF_REG_0, 0); + cnt =3D 7; } else { insn_buf[0] =3D BPF_MOV64_IMM(BPF_REG_0, -EOPNOTSUPP); cnt =3D 1; @@ -23331,8 +23333,9 @@ static int do_misc_fixups(struct bpf_verifier_env *= env) insn->imm =3D=3D BPF_FUNC_get_func_arg_cnt) { /* Load nr_args from ctx - 8 */ insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFF); =20 - new_prog =3D bpf_patch_insn_data(env, i + delta, insn_buf, 1); + new_prog =3D bpf_patch_insn_data(env, i + delta, insn_buf, 2); if (!new_prog) return -ENOMEM; =20 diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 6e076485bf70..5f621f0403f8 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -1194,7 +1194,7 @@ const struct bpf_func_proto bpf_get_branch_snapshot_p= roto =3D { BPF_CALL_3(get_func_arg, void *, ctx, u32, n, u64 *, value) { /* This helper call is inlined by verifier. */ - u64 nr_args =3D ((u64 *)ctx)[-1]; + u64 nr_args =3D ((u64 *)ctx)[-1] & 0xFF; =20 if ((u64) n >=3D nr_args) return -EINVAL; @@ -1214,7 +1214,7 @@ static const struct bpf_func_proto bpf_get_func_arg_p= roto =3D { BPF_CALL_2(get_func_ret, void *, ctx, u64 *, value) { /* This helper call is inlined by verifier. */ - u64 nr_args =3D ((u64 *)ctx)[-1]; + u64 nr_args =3D ((u64 *)ctx)[-1] & 0xFF; =20 *value =3D ((u64 *)ctx)[nr_args]; return 0; @@ -1231,7 +1231,7 @@ static const struct bpf_func_proto bpf_get_func_ret_p= roto =3D { BPF_CALL_1(get_func_arg_cnt, void *, ctx) { /* This helper call is inlined by verifier. */ - return ((u64 *)ctx)[-1]; + return ((u64 *)ctx)[-1] & 0xFF; } =20 static const struct bpf_func_proto bpf_get_func_arg_cnt_proto =3D { --=20 2.52.0 From nobody Sun Feb 8 12:14:21 2026 Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6D10B3451AE for ; Sat, 10 Jan 2026 14:12:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054324; cv=none; b=ru45YrzIILIt98ZY+BbivG81etr0WwN+p1I84DdRENfj9R7ltm3ytylJAPDKmQBZhrrNOIayNKVSDzCZPbTDcseGZQhdGRnqTTLUHfEyWMs33kjv38Fhq8VsW0sfLw+hVBzGcGhprs8ypsFu1dGTzVdbNBIX3bEXFlFV1iTja7k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054324; c=relaxed/simple; bh=z1FXtwKIRsZptJAyDyFFIRDl2UKWJMd6LDExUnxO6es=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kVWqlblzXq81+jaCpg3FC/KGdVXqb02mM9VORMRepQhAdLgjw2uaSMA7CKQCgRCIc2CAepSb9uMNkbfxoKfccgRPA2T69fmYzoPtAbzvH0LjEnwXl0A5d22Hs3v95cVUkA5zQWXk91tgfeRa7wSG4Q2xpYnMlppUbvVxgDSmwCM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=VLfJvHwu; arc=none smtp.client-ip=209.85.210.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VLfJvHwu" Received: by mail-pf1-f195.google.com with SMTP id d2e1a72fcca58-81e8b1bdf0cso662398b3a.3 for ; Sat, 10 Jan 2026 06:12:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054323; x=1768659123; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dfGdp4s1hudLP6FKv2EKIaTufWaeCLX1APZrG5rR5Yg=; b=VLfJvHwuVzL8rMClvJO4I5YzXw56cMFux6mA6esQenvUKdNhEMuGcaVtTSzlm8PDgz 0zU9L5jMuaEMSppIGRu1lPCH+TTRRhG+MNukGOR2VXJLddLd0V9dzx36TDfbKOCEdGa4 6emDqiGEsIWX610qkSHRpYc6NrAPR4NnkupB3d6MeUMRzgrB7ES9yM80vxaXvjoO+6Cv yrX2oHQxjat6APAbYiCUovf/5Aa1N4JYrzyBzwwziU9xLhfVbWG5dI9Hq5DVRcXBRCSq vo5IUaMAp4bvFCeNEcwU2/AAGlgUMg7xX2hiHzzUSjgChqNowuJiK1JnuncJtEAz4rr6 fYEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054323; x=1768659123; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=dfGdp4s1hudLP6FKv2EKIaTufWaeCLX1APZrG5rR5Yg=; b=mytZm3dHjHwEk45P1/N8ljU4ROjzwW8+4eTAzrywrvWSTOcnTUR87cIjnk75gfqGgf iO87XddDl7jgc++CIlfK2R/MjdWMfvcmavTbYafyrsLLYgc1csG9U5AJS9UBc7NEXKOB wfloceY1OjKjSv3I02w1z0y2/jWVXZkI2wpCWKAPV4q85otxFhN8Ouvl+0/EngVJ4CxS TeDflF/2juduH0iAb+wuiQtYDGl1I1ZKKIZkJnNw321CXBTPSp1YolNdO2O1rh4qHPjT KDoFZCz9WHKEyybJiFFBttNAjKLBIBwwK7SRQCRAPWWkGz0Sb1KJegikihrR9lOVJeLc RN1g== X-Forwarded-Encrypted: i=1; AJvYcCWPOi2fhCwwNi99hRz8RdUw6MP/cY0M4/dJRHPsKmuV+/doGJiQXw86nnyIceLlIm0SY2YJhIA6HdQdnh8=@vger.kernel.org X-Gm-Message-State: AOJu0YyzyRdHt7YMaie4bcBYiidgqbl3qLp2sFfF8lwxgnmIBpw0qaL+ NG+/t4LuXb5aBQiC582uAyHSxOpz3jsOkAw5cjCqCfQcdeAd1EmkQHTL X-Gm-Gg: AY/fxX5fKMnuNjG7zOv0n/L5SZOctx7dGH/Xkrro4Rqv+iEwt80jgPaZ2VgFZ1RxMGD qQwIpSxVHa1vjOgNdWs+lrzywmW3pjEhdAr3vBQN8ka5QcP96Ksc+hGtirVEyJBULeYv8pHW4Hf z/4Pylma4A1OgDKD14LpnjjP7MrPp3oDp3ZZqlSu2JI2+4hSrkbr2isD8Od5gANs2tp4pUzjaRV GZOcbAoBVQavUtRm+EnYpestsBJWPvtxuwRnkRJbqU6G/NvVDscHH2rAGMI+3SQ4ytzT83hHHN6 TWAKnKZMTr760Gc6qvcH4pkMQrPM6r6rG8HVGiuq4gbLtMpH/+GA//F7xl5U63cG218noteIASr L12uktd8vrWaeh78XKXY1JeNoQUXt5X4bB4yYR2zFKK28Zj+ix78JnCxehCR74O5DRmzpMq6Geg NlFr2if94= X-Google-Smtp-Source: AGHT+IHFsjOI9vY+1n9I9bmJ5B1pg0vIMAkiVFjV3qYORsRqw9CiS1Ot3VqYNtj2DaTbLEq8lAlYZQ== X-Received: by 2002:a05:6a00:4305:b0:7b9:7f18:c716 with SMTP id d2e1a72fcca58-81b7eb28136mr12520935b3a.1.1768054322695; Sat, 10 Jan 2026 06:12:02 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.11.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:12:02 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 03/11] bpf: change prototype of bpf_session_{cookie,is_return} Date: Sat, 10 Jan 2026 22:11:07 +0800 Message-ID: <20260110141115.537055-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add the function argument of "void *ctx" to bpf_session_cookie() and bpf_session_is_return(), which is a preparation of the next patch. The two kfunc is seldom used now, so it will not introduce much effect to change their function prototype. Signed-off-by: Menglong Dong Acked-by: Andrii Nakryiko --- kernel/trace/bpf_trace.c | 4 ++-- tools/testing/selftests/bpf/bpf_kfuncs.h | 4 ++-- .../bpf/progs/kprobe_multi_session_cookie.c | 12 ++++++------ .../selftests/bpf/progs/uprobe_multi_session.c | 4 ++-- .../bpf/progs/uprobe_multi_session_cookie.c | 12 ++++++------ .../bpf/progs/uprobe_multi_session_recursive.c | 8 ++++---- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 5f621f0403f8..297dcafb2c55 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -3316,7 +3316,7 @@ static u64 bpf_uprobe_multi_entry_ip(struct bpf_run_c= tx *ctx) =20 __bpf_kfunc_start_defs(); =20 -__bpf_kfunc bool bpf_session_is_return(void) +__bpf_kfunc bool bpf_session_is_return(void *ctx) { struct bpf_session_run_ctx *session_ctx; =20 @@ -3324,7 +3324,7 @@ __bpf_kfunc bool bpf_session_is_return(void) return session_ctx->is_return; } =20 -__bpf_kfunc __u64 *bpf_session_cookie(void) +__bpf_kfunc __u64 *bpf_session_cookie(void *ctx) { struct bpf_session_run_ctx *session_ctx; =20 diff --git a/tools/testing/selftests/bpf/bpf_kfuncs.h b/tools/testing/selft= ests/bpf/bpf_kfuncs.h index e0189254bb6e..dc495cb4c22e 100644 --- a/tools/testing/selftests/bpf/bpf_kfuncs.h +++ b/tools/testing/selftests/bpf/bpf_kfuncs.h @@ -79,8 +79,8 @@ extern int bpf_verify_pkcs7_signature(struct bpf_dynptr *= data_ptr, struct bpf_dynptr *sig_ptr, struct bpf_key *trusted_keyring) __ksym; =20 -extern bool bpf_session_is_return(void) __ksym __weak; -extern __u64 *bpf_session_cookie(void) __ksym __weak; +extern bool bpf_session_is_return(void *ctx) __ksym __weak; +extern __u64 *bpf_session_cookie(void *ctx) __ksym __weak; =20 struct dentry; /* Description diff --git a/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.= c b/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c index 0835b5edf685..4981d29e3907 100644 --- a/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c +++ b/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c @@ -23,16 +23,16 @@ int BPF_PROG(trigger) return 0; } =20 -static int check_cookie(__u64 val, __u64 *result) +static int check_cookie(struct pt_regs *ctx, __u64 val, __u64 *result) { __u64 *cookie; =20 if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - cookie =3D bpf_session_cookie(); + cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) + if (bpf_session_is_return(ctx)) *result =3D *cookie =3D=3D val ? val : 0; else *cookie =3D val; @@ -42,17 +42,17 @@ static int check_cookie(__u64 val, __u64 *result) SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_1(struct pt_regs *ctx) { - return check_cookie(1, &test_kprobe_1_result); + return check_cookie(ctx, 1, &test_kprobe_1_result); } =20 SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_2(struct pt_regs *ctx) { - return check_cookie(2, &test_kprobe_2_result); + return check_cookie(ctx, 2, &test_kprobe_2_result); } =20 SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_3(struct pt_regs *ctx) { - return check_cookie(3, &test_kprobe_3_result); + return check_cookie(ctx, 3, &test_kprobe_3_result); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session.c b/too= ls/testing/selftests/bpf/progs/uprobe_multi_session.c index 30bff90b68dc..a06c2d7ec022 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session.c @@ -51,7 +51,7 @@ static int uprobe_multi_check(void *ctx, bool is_return) SEC("uprobe.session//proc/self/exe:uprobe_multi_func_*") int uprobe(struct pt_regs *ctx) { - return uprobe_multi_check(ctx, bpf_session_is_return()); + return uprobe_multi_check(ctx, bpf_session_is_return(ctx)); } =20 static __always_inline bool verify_sleepable_user_copy(void) @@ -67,5 +67,5 @@ int uprobe_sleepable(struct pt_regs *ctx) { if (verify_sleepable_user_copy()) uprobe_multi_sleep_result++; - return uprobe_multi_check(ctx, bpf_session_is_return()); + return uprobe_multi_check(ctx, bpf_session_is_return(ctx)); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.= c b/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c index 5befdf944dc6..d916d5017233 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c @@ -13,16 +13,16 @@ __u64 test_uprobe_1_result =3D 0; __u64 test_uprobe_2_result =3D 0; __u64 test_uprobe_3_result =3D 0; =20 -static int check_cookie(__u64 val, __u64 *result) +static int check_cookie(struct pt_regs *ctx, __u64 val, __u64 *result) { __u64 *cookie; =20 if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - cookie =3D bpf_session_cookie(); + cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) + if (bpf_session_is_return(ctx)) *result =3D *cookie =3D=3D val ? val : 0; else *cookie =3D val; @@ -32,17 +32,17 @@ static int check_cookie(__u64 val, __u64 *result) SEC("uprobe.session//proc/self/exe:uprobe_multi_func_1") int uprobe_1(struct pt_regs *ctx) { - return check_cookie(1, &test_uprobe_1_result); + return check_cookie(ctx, 1, &test_uprobe_1_result); } =20 SEC("uprobe.session//proc/self/exe:uprobe_multi_func_2") int uprobe_2(struct pt_regs *ctx) { - return check_cookie(2, &test_uprobe_2_result); + return check_cookie(ctx, 2, &test_uprobe_2_result); } =20 SEC("uprobe.session//proc/self/exe:uprobe_multi_func_3") int uprobe_3(struct pt_regs *ctx) { - return check_cookie(3, &test_uprobe_3_result); + return check_cookie(ctx, 3, &test_uprobe_3_result); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursi= ve.c b/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c index 8fbcd69fae22..d3d682512b69 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c @@ -16,11 +16,11 @@ int idx_return =3D 0; __u64 test_uprobe_cookie_entry[6]; __u64 test_uprobe_cookie_return[3]; =20 -static int check_cookie(void) +static int check_cookie(struct pt_regs *ctx) { - __u64 *cookie =3D bpf_session_cookie(); + __u64 *cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) { + if (bpf_session_is_return(ctx)) { if (idx_return >=3D ARRAY_SIZE(test_uprobe_cookie_return)) return 1; test_uprobe_cookie_return[idx_return++] =3D *cookie; @@ -40,5 +40,5 @@ int uprobe_recursive(struct pt_regs *ctx) if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - return check_cookie(); + return check_cookie(ctx); } --=20 2.52.0 From nobody Sun Feb 8 12:14:21 2026 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC1513451AE for ; Sat, 10 Jan 2026 14:12:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054335; cv=none; b=RBFGN76k0RY6dvVbVQV0qd6cm6N23Bi29XEV2FwJyK8AnsSR6ICazyNDM1aCkGgTmowpMUyPBaQ1ouXtBApl3b2T9Bn12DRRZyYF1Vkc1o+6fBjXl413gWAUx6IhQxsBsfUvmpWYDC1d4rDifOtKz4IHzHamwL/ewW/re5IUlFc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054335; c=relaxed/simple; bh=n/7k5mO/6SZ7HqVRB1N/I0OmYGbrp12aFWUTdPqo8s0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dQVphcYGkDklU/QHRM51zDb9yOB0r9RSNoI1O3nJ8sChy2kF6RUSePxjKhCXcFsHKWvkMLaTUlXWIluQzliZ6nnPf/6gm4shugQI2JIQuB9Llw8iNBajBYnmcmZY7w3PqqYUmxYYVHYtB+kXstM+fq1SJQPCDpITotG/VAFrYxk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=EEPmuRAV; arc=none smtp.client-ip=209.85.210.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EEPmuRAV" Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-7b8eff36e3bso5046769b3a.2 for ; Sat, 10 Jan 2026 06:12:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054333; x=1768659133; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+zpUBClHIGdPZIQ45WTEZS7Nhxwojh2mUAy6TAH9Jbw=; b=EEPmuRAVPBkkl34bfvurCb1Dfru1a8+WQsfpDTuoTxLwK9YhBkIKxGCq5KJ9iDPGyE f/diZaTZYPoQcF7l72iB0KWKfvk4w9XqWx0GOW+Bp+3E3vdDsWt1Pz8YYZuSgFCrorbT CeOJWWkCWfplsqzR7FpjbkJ7xozn/HgY6JzneeQaENbdp28TSetDw36u56jF7angTOop hiL0NcUPj9OmvoZyG6Ob7SEv+WPjXMKDTB3r+pVckzTkl1+5QqSlkjsXQCZ1HgTXwB+A Fx5UMmjbKUutaellgpOQKGDDTrvvdUQ4uaDhyZYEy7Cdzz0Ewrzkc7zBZcNBQhPZGoXh o6tA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054333; x=1768659133; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=+zpUBClHIGdPZIQ45WTEZS7Nhxwojh2mUAy6TAH9Jbw=; b=kSk/gTG6ioA5LtYv34OuQNvVqLc5c1vTmxaCDZSkQ07tJdLHfGfvb4XlcXOWn0BEuE fNMriLEVnjhv9Zb0Et8VoA7VkIy7pUVM/vWq5shxGAm4+r/Rv7ILbSB6eOk4rEXzV77K B6rvydTl4wsos7baExL3hrvqGWo3eOJzBcM04u6arkBz0Ep5dn63O2JfLATQh3jck9CR nk51gd48GzunPncInJpMlIrZBJcuZ5iyHLexRybCxULGvLXVAeu75gVbmzwQMBE7MFe4 iXhWSZpruswJKo/S/bcHKbYt2WHWgmOAvZfkXR8tNkQYaoOTGmkb/UTwdr+Gh0kuDcrn m/VQ== X-Forwarded-Encrypted: i=1; AJvYcCVZ3xqpTzQAWNTLvcJ/7tQq/o42XaV9fWJ1XNLqL8yfQmjcF+HsOdcbEj71QB8QybstnKOgAbrDXk0WEZA=@vger.kernel.org X-Gm-Message-State: AOJu0Ywa9xX/n4jLrlw6Y7TtjbaDbJsEcyZvJEeZSm8eFZknyN5mzefn 3s4GAqaC7uoSlVVelhhxViSzpk3R4uzNbzeF5prOP/XMi9lkCwgJswan10KgyANmn99+WA== X-Gm-Gg: AY/fxX7DBF1I6Psp1kOw5WmvnZh+qgETR/hk6VoAESiRGQJpkK8HkCsjTXvPo8zI0ov ANfaj96XDQP85eMkQjO9/PBPMUWiMRVFRGQv2MgVLerHwF5XyxBeqGp2AcF3NyqjdVAKx9Owtu2 /6d57DgF1lRT6jY0FNItS42WmvhL7RWydxErWW0zuP68ucmaBosNpfpqLCUM3QYz2FrnEURIIPI RwTpiQgef88LHs3M4rYjrl4RKBgTmgyXFUjt8Asa39r3veOANzsUR2tddJ+/YVFdEuNeLQseWtv OBZS6DFh7JaBhqR3Cik3aPsqXOgwps23lgV+8Ae3i6sWH6x6nOcEG54RhUvmKbTpIyJOhXSiB7k xxDKFqt0NZGcZqv1+munNS7ylNvEvciVdC4yXckfojCM7+EMU7iM7D1xeevH5doBnDagbvsVSm1 +7/bLBt+Q= X-Google-Smtp-Source: AGHT+IG31oLOfstQo576BCLakdE0G7b1VJi9fSiQv5hvsVWJVmiQKV1SlMPR10Y/aPftZLJljsKelA== X-Received: by 2002:a05:6a00:f94:b0:81e:f623:ba0c with SMTP id d2e1a72fcca58-81ef623bc8dmr3387614b3a.44.1768054333195; Sat, 10 Jan 2026 06:12:13 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.12.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:12:12 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 04/11] bpf: support fsession for bpf_session_is_return Date: Sat, 10 Jan 2026 22:11:08 +0800 Message-ID: <20260110141115.537055-5-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If fsession exists, we will use the bit (1 << BPF_TRAMP_M_IS_RETURN) in ctx[-1] to store the "is_return" flag. The logic of bpf_session_is_return() for fsession is implemented in the verifier by inline following code: bool bpf_session_is_return(void *ctx) { return !!(((u64 *)ctx)[-1] & (1 << BPF_TRAMP_M_IS_RETURN)); } Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v9: - remove the definition of bpf_fsession_is_return() v7: - reuse the kfunc bpf_session_is_return() instead of introduce new kfunc v4: - split out the bpf_fsession_cookie() to another patch v3: - merge the bpf_tracing_is_exit and bpf_fsession_cookie into a single patch v2: - store the session flags after return value, instead of before nr_args - inline the bpf_tracing_is_exit, as Jiri suggested --- include/linux/bpf.h | 3 +++ kernel/bpf/verifier.c | 15 ++++++++++++++- kernel/trace/bpf_trace.c | 28 +++++++++++++++++----------- 3 files changed, 34 insertions(+), 12 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 41228b0add52..2640ec2157e1 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1229,6 +1229,9 @@ enum { #endif }; =20 +#define BPF_TRAMP_M_NR_ARGS 0 +#define BPF_TRAMP_M_IS_RETURN 8 + struct bpf_tramp_links { struct bpf_tramp_link *links[BPF_MAX_TRAMP_LINKS]; int nr_links; diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index bfff3f84fd91..1b0292a03186 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -12374,6 +12374,7 @@ enum special_kfunc_type { KF_bpf_arena_alloc_pages, KF_bpf_arena_free_pages, KF_bpf_arena_reserve_pages, + KF_bpf_session_is_return, }; =20 BTF_ID_LIST(special_kfunc_list) @@ -12451,6 +12452,7 @@ BTF_ID(func, bpf_task_work_schedule_resume_impl) BTF_ID(func, bpf_arena_alloc_pages) BTF_ID(func, bpf_arena_free_pages) BTF_ID(func, bpf_arena_reserve_pages) +BTF_ID(func, bpf_session_is_return) =20 static bool is_task_work_add_kfunc(u32 func_id) { @@ -12505,7 +12507,8 @@ get_kfunc_ptr_arg_type(struct bpf_verifier_env *env, struct bpf_reg_state *reg =3D ®s[regno]; bool arg_mem_size =3D false; =20 - if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx]) + if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_return]) return KF_ARG_PTR_TO_CTX; =20 if (argno + 1 < nargs && @@ -22558,6 +22561,16 @@ static int fixup_kfunc_call(struct bpf_verifier_en= v *env, struct bpf_insn *insn, desc->func_id =3D=3D special_kfunc_list[KF_bpf_rdonly_cast]) { insn_buf[0] =3D BPF_MOV64_REG(BPF_REG_0, BPF_REG_1); *cnt =3D 1; + } else if (desc->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_retu= rn] && + env->prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + /* implement and inline the bpf_session_is_return() for + * fsession, and the logic is: + * return !!(((u64 *)ctx)[-1] & (1 << BPF_TRAMP_M_IS_RETURN)) + */ + insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_M_IS_RETURN); + insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1); + *cnt =3D 3; } =20 if (env->insn_aux_data[insn_idx].arg_prog) { diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 297dcafb2c55..1fe508d451b7 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -3334,34 +3334,40 @@ __bpf_kfunc __u64 *bpf_session_cookie(void *ctx) =20 __bpf_kfunc_end_defs(); =20 -BTF_KFUNCS_START(kprobe_multi_kfunc_set_ids) +BTF_KFUNCS_START(session_kfunc_set_ids) BTF_ID_FLAGS(func, bpf_session_is_return) BTF_ID_FLAGS(func, bpf_session_cookie) -BTF_KFUNCS_END(kprobe_multi_kfunc_set_ids) +BTF_KFUNCS_END(session_kfunc_set_ids) =20 -static int bpf_kprobe_multi_filter(const struct bpf_prog *prog, u32 kfunc_= id) +static int bpf_session_filter(const struct bpf_prog *prog, u32 kfunc_id) { - if (!btf_id_set8_contains(&kprobe_multi_kfunc_set_ids, kfunc_id)) + if (!btf_id_set8_contains(&session_kfunc_set_ids, kfunc_id)) return 0; =20 - if (!is_kprobe_session(prog) && !is_uprobe_session(prog)) + if (!is_kprobe_session(prog) && !is_uprobe_session(prog) && + prog->expected_attach_type !=3D BPF_TRACE_FSESSION) return -EACCES; =20 return 0; } =20 -static const struct btf_kfunc_id_set bpf_kprobe_multi_kfunc_set =3D { +static const struct btf_kfunc_id_set bpf_session_kfunc_set =3D { .owner =3D THIS_MODULE, - .set =3D &kprobe_multi_kfunc_set_ids, - .filter =3D bpf_kprobe_multi_filter, + .set =3D &session_kfunc_set_ids, + .filter =3D bpf_session_filter, }; =20 -static int __init bpf_kprobe_multi_kfuncs_init(void) +static int __init bpf_trace_kfuncs_init(void) { - return register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_kprobe_multi_= kfunc_set); + int err =3D 0; + + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_sessi= on_kfunc_set); + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_TRACING, &bpf_sess= ion_kfunc_set); + + return err; } =20 -late_initcall(bpf_kprobe_multi_kfuncs_init); +late_initcall(bpf_trace_kfuncs_init); =20 typedef int (*copy_fn_t)(void *dst, const void *src, u32 size, struct task= _struct *tsk); =20 --=20 2.52.0 From nobody Sun Feb 8 12:14:21 2026 Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 012DD340262 for ; Sat, 10 Jan 2026 14:12:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054344; cv=none; b=CsJJVbHNqGh5HZztww7Fn+aBXfQlOJBpG1LjWYkxEXIVVpKezkeoq6Iok/oLXD4srR5Vbl44++LzyRYQoRr3I0EmDHp3dbYbSPPnoxKyjOP3FGEWk7ALuznbJyYWKs4PYuJxe2jVduzgeGW8pBkAvpbJxcRcxZ+DM6zvPiqMLSk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054344; c=relaxed/simple; bh=7CI1fk3TYCP047X1bCPgKC9owVKrRj9F5Z1yX731DHI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fv+K2F5iovcBpQojy1ggiPRTtZWSsGXoL1vgMP/mBrpkr7vbXMxH5YVszE25Ai6KiV+/Y11deJ7PU57TPt5X6IyNBcykWLg1iieOlnfGPqPhG6B+4QZgLJyI6uQ7QJg3DwuMYGzlBSQo7JQDXM9H8HKXUMm3ouBBcIQ1BC/9J/o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=g6aaWgtt; arc=none smtp.client-ip=209.85.210.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="g6aaWgtt" Received: by mail-pf1-f195.google.com with SMTP id d2e1a72fcca58-81f223c70d8so694407b3a.1 for ; Sat, 10 Jan 2026 06:12:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054342; x=1768659142; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VNf2fCgeJYWw76i+2OmkMmdqYk7qfGL3S+zuHB6a7CY=; b=g6aaWgttX8cMKXQW7Sk4O1TicaSColsnUdu7ClxR+kL/OVXaZfbQA4924hGXnhb3q4 d9ykcYCNCipyh3QUEhBX7Rh0FbB5PEXI3PmYibwVZ3P0NMUy5lgZjnIyPplghIkJsUl2 I9aJGVB7cl4YYdpugeIJZnSdpTEHdGRWYxnSyhw6STV46dCefZjMgd8FRhMWq6qTA+/r AlLPttl76H7t5hBc408c68T94L0F9tLkUneQnc/1AQiGZCPtHpDlnqYNZgArSZuAkf4k lbJgGuEH5p/YAmTL8qvGQfzl6pVrnwoATFiAT6ctmAKVL5A1O7ORag4dk9lzwZVDK+U2 YhIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054342; x=1768659142; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=VNf2fCgeJYWw76i+2OmkMmdqYk7qfGL3S+zuHB6a7CY=; b=nOUCmKGK0f0g15bfMQ/QvTveroujrQjaouYiWpAMoJsbDblJ9VsjsjqGvJzkzMYsxT E1TDSb8uEpe1M7jhVzRktpLom7vu1g+L5WC9ZBylr/P1gcYlpzWj6KauTpGgp+NvmHdD AdK6g1zlCbCEKxJpaEQqca2k9mtkCtnkUlLgJy4dRQKJu1z3IpNoKkitvbRSroeu6pTM 5yp+LpgvZkN+HUVsDqwRFoSZCvPQm2K9ULcBFlR2ndpS6au0Rd3xz53KM4bJJkmgcKr/ m1JDGreQPsaglMCIDy2Orci4P+fYXiRb+iL05frNpcJkxEHkmsNFR00tFCtvmVZQ1B9K mN2g== X-Forwarded-Encrypted: i=1; AJvYcCU3jVD9iI2XA3AeJ9rQVTTRcB2LJDODJf0OMMKPZLS4zpATNaGF7b4YjHm30yxE0wafA/HYGIVbOuTDVtg=@vger.kernel.org X-Gm-Message-State: AOJu0Ywwrjg7k/zBkjFtE7uk7TgMmN/B+6YLgiFhvtazIR0+wimk+rhl KdZXhgb+YKJDlksgpB/KCsTi8ZpsfwE2jrdTNNOGgl/8YwPUrS5H9ifX X-Gm-Gg: AY/fxX6/Z/H7fTB16zZ7OGU9wNmO4F2nj/ANn9oa2Uc9BOgrhyz8tI7sGfO1kl4xIPX 3hZzuafmCjRh/NnhurO6QEBEaCeSMJ1go1C7QYjfzm5Vg7maN2Yn/a8Q2WyH/MGEtzh/4+zEJBr NgrTvaC6/ETfV9qydkSM2GrbCsayDOqITbP4092VTVuPIrxypff75t/AVUNtnWt1xCsnRICe2sd vHfRJouk83WIl4zl3zQ1TNYkmnoeRwnksh3HhgQ833l6juhUHiaIz8GapPrmoF2p5DqlpiUR22z WYNE/9n8WTSojJqFXki0koVcZnvubjBsMsXncn5ocO6awBy5+j6LS6jch7DWJI0Cycd8L3AtxvP c38fcjNHO/xzqn1rgGCrptF3EwvdfdxvLqLzENwN2Et9cZarGorPqkTTEqNcsTiCLd3s5qqm8VN jVlyx56HE= X-Google-Smtp-Source: AGHT+IHvijOn+AVM4DEWsKjCWx0EyWcN+T7+lYBawoPBdq2YSqCcVqk2/nBn3ab67rucNzjDc3jn4g== X-Received: by 2002:a05:6a00:a113:b0:81c:717b:9d36 with SMTP id d2e1a72fcca58-81c717ba5d1mr8037609b3a.33.1768054342206; Sat, 10 Jan 2026 06:12:22 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.12.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:12:21 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 05/11] bpf: support fsession for bpf_session_cookie Date: Sat, 10 Jan 2026 22:11:09 +0800 Message-ID: <20260110141115.537055-6-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement session cookie for fsession. In order to limit the stack usage, we make 4 as the maximum of the cookie count. The offset of the current cookie is stored in the "(ctx[-1] >> BPF_TRAMP_M_COOKIE) & 0xFF". Therefore, we can get the session cookie with ctx[-offset]. The stack will look like this: return value -> 8 bytes argN -> 8 bytes ... arg1 -> 8 bytes nr_args -> 8 bytes ip (optional) -> 8 bytes cookie2 -> 8 bytes cookie1 -> 8 bytes Implement and inline the bpf_session_cookie() for the fsession in the verifier. Signed-off-by: Menglong Dong --- v9: - remove the definition of bpf_fsession_cookie() v7: - reuse bpf_session_cookie() instead of introduce new kfunc v5: - remove "cookie_cnt" in struct bpf_trampoline v4: - limit the maximum of the cookie count to 4 - store the session cookies before nr_regs in stack --- include/linux/bpf.h | 15 +++++++++++++++ kernel/bpf/trampoline.c | 13 +++++++++++-- kernel/bpf/verifier.c | 22 +++++++++++++++++++++- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 2640ec2157e1..a416050e0dd2 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1231,6 +1231,7 @@ enum { =20 #define BPF_TRAMP_M_NR_ARGS 0 #define BPF_TRAMP_M_IS_RETURN 8 +#define BPF_TRAMP_M_COOKIE 9 =20 struct bpf_tramp_links { struct bpf_tramp_link *links[BPF_MAX_TRAMP_LINKS]; @@ -1783,6 +1784,7 @@ struct bpf_prog { enforce_expected_attach_type:1, /* Enforce expected_attach_type checki= ng at attach time */ call_get_stack:1, /* Do we call bpf_get_stack() or bpf_get_stackid() */ call_get_func_ip:1, /* Do we call get_func_ip() */ + call_session_cookie:1, /* Do we call bpf_session_cookie() */ tstamp_type_access:1, /* Accessed __sk_buff->tstamp_type */ sleepable:1; /* BPF program is sleepable */ enum bpf_prog_type type; /* Type of BPF program */ @@ -2191,6 +2193,19 @@ static inline int bpf_fsession_cnt(struct bpf_tramp_= links *links) return cnt; } =20 +static inline int bpf_fsession_cookie_cnt(struct bpf_tramp_links *links) +{ + struct bpf_tramp_links fentries =3D links[BPF_TRAMP_FENTRY]; + int cnt =3D 0; + + for (int i =3D 0; i < links[BPF_TRAMP_FENTRY].nr_links; i++) { + if (fentries.links[i]->link.prog->call_session_cookie) + cnt++; + } + + return cnt; +} + int bpf_prog_ctx_arg_info_init(struct bpf_prog *prog, const struct bpf_ctx_arg_aux *info, u32 cnt); =20 diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c index 11e043049d68..29b4e00d860c 100644 --- a/kernel/bpf/trampoline.c +++ b/kernel/bpf/trampoline.c @@ -592,6 +592,8 @@ static int bpf_freplace_check_tgt_prog(struct bpf_prog = *tgt_prog) return 0; } =20 +#define BPF_TRAMP_MAX_COOKIES 4 + static int __bpf_trampoline_link_prog(struct bpf_tramp_link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog) @@ -600,7 +602,7 @@ static int __bpf_trampoline_link_prog(struct bpf_tramp_= link *link, struct bpf_tramp_link *link_exiting; struct bpf_fsession_link *fslink; struct hlist_head *prog_list; - int err =3D 0; + int err =3D 0, cookie_cnt =3D 0; int cnt =3D 0, i; =20 kind =3D bpf_attach_type_to_tramp(link->link.prog); @@ -637,11 +639,18 @@ static int __bpf_trampoline_link_prog(struct bpf_tram= p_link *link, /* prog already linked */ return -EBUSY; hlist_for_each_entry(link_exiting, prog_list, tramp_hlist) { - if (link_exiting->link.prog !=3D link->link.prog) + if (link_exiting->link.prog !=3D link->link.prog) { + if (kind =3D=3D BPF_TRAMP_FSESSION && + link_exiting->link.prog->call_session_cookie) + cookie_cnt++; continue; + } /* prog already linked */ return -EBUSY; } + if (link->link.prog->call_session_cookie && + cookie_cnt >=3D BPF_TRAMP_MAX_COOKIES) + return -E2BIG; =20 hlist_add_head(&link->tramp_hlist, prog_list); if (kind =3D=3D BPF_TRAMP_FSESSION) { diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 1b0292a03186..b91fd8af2393 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -12508,7 +12508,8 @@ get_kfunc_ptr_arg_type(struct bpf_verifier_env *env, bool arg_mem_size =3D false; =20 if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx] || - meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_return]) + meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_return] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]) return KF_ARG_PTR_TO_CTX; =20 if (argno + 1 < nargs && @@ -14294,6 +14295,9 @@ static int check_kfunc_call(struct bpf_verifier_env= *env, struct bpf_insn *insn, return err; } =20 + if (meta.func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]) + env->prog->call_session_cookie =3D true; + return 0; } =20 @@ -22571,6 +22575,22 @@ static int fixup_kfunc_call(struct bpf_verifier_en= v *env, struct bpf_insn *insn, insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_M_IS_RETURN); insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1); *cnt =3D 3; + } else if (desc->func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]= && + env->prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + /* inline bpf_session_cookie() for fsession: + * __u64 *bpf_session_cookie(void *ctx) + * { + * u64 off =3D (((u64 *)ctx)[-1] >> BPF_TRAMP_M_COOKIE) & 0xFF; + * return &((u64 *)ctx)[-off]; + * } + */ + insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_M_COOKIE); + insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFF); + insn_buf[3] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3); + insn_buf[4] =3D BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1); + insn_buf[5] =3D BPF_ALU64_IMM(BPF_NEG, BPF_REG_0, 0); + *cnt =3D 6; } =20 if (env->insn_aux_data[insn_idx].arg_prog) { --=20 2.52.0 From nobody Sun Feb 8 12:14:21 2026 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id ABEC43446B9 for ; Sat, 10 Jan 2026 14:12:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054355; cv=none; b=Q0KpPz+/7pAPtjlGGAwhaJYRWPgEk8g3WhWyEFqR6lXv5Zlr/O0LMYMvtggmc2u5F3RV0Ao2MH6+FBctytX+BSTt9mAfa9ONjBp42xwLCexJi5lMyrgJot65TUsXQyZ67IG2cV1s+nu6krfc0V2NOhc2udhQ35m73ECJShtluIM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054355; c=relaxed/simple; bh=Jl4pPblCht3wmewNy4AzorDUqLIIBs1abVtcBevb20M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C2CsS/8cxUa6r1MP+juZMAfOtkI6u49uCOTqPQhD8WCU3U0pmjQnDp0vUlQSPXdmTQmpQTcoSf5sKY5UA+ns5A5sbJUsQyaD8Os3SsWnYTMPAa8Skbuz6Fs4kLksuts53K68HcK+5VaHq1J6D2JVnZb0hjh7yqtMtqoPeIAXP/Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=SfR/9MOC; arc=none smtp.client-ip=209.85.210.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SfR/9MOC" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-81f478e5283so109475b3a.2 for ; Sat, 10 Jan 2026 06:12:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054353; x=1768659153; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=dY3ezCDqJEw5lLNp3hPcdtqAe3v6kNoUNdbynGQ6sjc=; b=SfR/9MOCfk3B0n2ty4b7itFLZiy5OAPmoAa6p11TBUqDXMx8MCUnWdKgM7CS3UH7Jh bcYco6lW96Mo0DfZb2f3W+nFX0LPzpEDosZgjjVpI3ZQMKtY37PXufssYdRHY+0UvadX sAK5yew8atlTpSDbe3Q6IxLQm+soldInJhu6XKddmfFVt8t0oWiINgvdSicf2T/XRtlJ SQk62Guz0BWLoWNY8+0DG4y/lovwi0O+CxQi2MEgKgamMEuoTOUzqcfQuTMwgHT+6cyr l0MS9K8pTZx/NAOezUWlYcQv1ScdTEroQZq/ErGf3xY9K0xBKjG0atvq+sDEnB5KgggB 4eiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054353; x=1768659153; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=dY3ezCDqJEw5lLNp3hPcdtqAe3v6kNoUNdbynGQ6sjc=; b=rFybfuw4xo6iuyVmSN6I7dkDRdvFKSZeipOdr62/Znne2dTW8wbZEMqn9Q1i9S4vZb L4FtcnfKzUBjdo+ZCqYNW9rMeWx9jEnbmEvfwpjAUH6JoFeOrT3EqLB4WToClE1B2ZGm R8eqfaNg6x856IAos3H7C0qGpnXILQu8Vbuq10V6FXJJXbRTIz3XOLkw+l+9ZKmtfinB c/WuedU15oCP88dt+FFoz5hrQIr/9jCEureK3Z0WnOK0LzovD83cUTYlexpUkofZVCpK 8Rb8rGU3v4a4LlVpFM28cC8FN6tS5y8riPGbNOxjMr8COwvpXBUWeQFE8V7HqJeOXDeT ZaZA== X-Forwarded-Encrypted: i=1; AJvYcCW9opJYdU9+dSvLqFr0k6FJS2aQaQFKCIUdmItycjE40bTStF1BMBsp7pPfyxCk2XlyDm3NOZcejfIx1tE=@vger.kernel.org X-Gm-Message-State: AOJu0YxjUf5fSWfwnlUO9F6evh692CxFz6wG1VkIVjJDjhjxXsUUX3Xo /EANTwmu6x3WycnliWrfTkIrx6MwDks0pqOUQoJoS1fJzGE3ppPL0pFD X-Gm-Gg: AY/fxX7p1tSWAahHJ3BbI+NF6yskNIym9RUNz4WiISJ5is9xyNCR6+ckV5YQ7CGdMxL OW0BFniPijIstS4TLkfjDgd0gSLjeosuLneicSj9HzqpVebLLaEPHjU07ANywmUPcQ27h1zZQJ/ PkVxA6SI7NlWmOuVJGWVQ276ClmoH4DDbS9oIOPJpSBqjWbc50NgpYwqPBYPR68d3HBwHiQbgvM dhtrT5gOzp7h3NEEzBONs0PefkGPBKAZGCESk02U3odmncYk/IkFRw0oh1Ui3c5W3WF3xuaWcjK H8JHzl1E7LiW8ryfa9haMLTprZlGVfJlEWJEZv9a1vHV9zpMYBCP2DroV36tbTxOXUyNeSxp9Q1 sX/YpfcPWWcMpQsbofdwKSp1TjkRodLjTz1gs8Q2LS03MfUNP3UosFDnqRIT9eaeqJGrlq3udoJ jDOOGWeXE= X-Google-Smtp-Source: AGHT+IGDcnm/lkKKBuwc0MZ05ieVLcfimIlOgX2VnOdk2Fk0Ph8Hu9l31xuFI2Cmcw9Y52dW2IfBow== X-Received: by 2002:a05:6a00:7704:b0:81c:555c:e85d with SMTP id d2e1a72fcca58-81c555ceb11mr7645214b3a.36.1768054353061; Sat, 10 Jan 2026 06:12:33 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.12.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:12:32 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 06/11] bpf,x86: introduce emit_store_stack_imm64() for trampoline Date: Sat, 10 Jan 2026 22:11:10 +0800 Message-ID: <20260110141115.537055-7-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce the helper emit_store_stack_imm64(), which is used to store a imm64 to the stack with the help of r0. Signed-off-by: Menglong Dong --- v9: - rename emit_st_r0_imm64() to emit_store_stack_imm64() --- arch/x86/net/bpf_jit_comp.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index e3b1c4b1d550..d94f7038c441 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -1300,6 +1300,15 @@ static void emit_st_r12(u8 **pprog, u32 size, u32 ds= t_reg, int off, int imm) emit_st_index(pprog, size, dst_reg, X86_REG_R12, off, imm); } =20 +static void emit_store_stack_imm64(u8 **pprog, int stack_off, u64 imm64) +{ + /* mov rax, imm64 + * mov QWORD PTR [rbp - stack_off], rax + */ + emit_mov_imm64(pprog, BPF_REG_0, imm64 >> 32, (u32) imm64); + emit_stx(pprog, BPF_DW, BPF_REG_FP, BPF_REG_0, -stack_off); +} + static int emit_atomic_rmw(u8 **pprog, u32 atomic_op, u32 dst_reg, u32 src_reg, s16 off, u8 bpf_size) { @@ -3352,16 +3361,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, void *rw_im * mov rax, nr_regs * mov QWORD PTR [rbp - nregs_off], rax */ - emit_mov_imm64(&prog, BPF_REG_0, 0, (u32) nr_regs); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -nregs_off); + emit_store_stack_imm64(&prog, nregs_off, nr_regs); =20 if (flags & BPF_TRAMP_F_IP_ARG) { /* Store IP address of the traced function: * movabsq rax, func_addr * mov QWORD PTR [rbp - ip_off], rax */ - emit_mov_imm64(&prog, BPF_REG_0, (long) func_addr >> 32, (u32) (long) fu= nc_addr); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -ip_off); + emit_store_stack_imm64(&prog, ip_off, (long)func_addr); } =20 save_args(m, &prog, regs_off, false, flags); --=20 2.52.0 From nobody Sun Feb 8 12:14:21 2026 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A3BBD3446B9 for ; Sat, 10 Jan 2026 14:12:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054366; cv=none; b=CSXqPf5cbB5SUAbQTpzTzmQCz/4jBVReKmScL8mO7Qr0s+rXIAybhhq1fspdxCNp0JZDCgCw4+nlwhl7bQoISAlXMau3rV+GPID990EzPZ4SEwIRUye9OrgXpbfA9SwgbooTGZJqxxxNno/G6+FfjhYMQ8bbZ/oH8/NqGyJDhfI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054366; c=relaxed/simple; bh=UKWXQ8lrzEPWgxemDQ6yw1XM1w6GFT2HGNkxpdD4QCQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cZgbSO0+qw/i686ys/FobdZAGtcilM73hfl5ds7xEBdFvowaNvSi+6rwLMDz9UV46eeSoa5HeWoa54sP5XXBoJgGG1KhjQUI5wLP1CIlIAfxsP1fNjG7tAtA3xhTFmuCJkJJdfzrcTbbcF94FoWoN31f3liREVevQVOKFHHXO3E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gr3NB1Ou; arc=none smtp.client-ip=209.85.210.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gr3NB1Ou" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-81e8b1bdf0cso662488b3a.3 for ; Sat, 10 Jan 2026 06:12:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054364; x=1768659164; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cuDJq9OcqlXOoYELFFiMxpUFbHiZNG+R5rDqqX2qwUQ=; b=gr3NB1OuUqE8dhGgStPxbNpGmJCzdiGVIJH0J0Ai2da/zqHsC6FhVyDeExcn04poYh wteR8fNdsrrD1fvOtPdNNeqSlCibNDmv7WfiMhAh1GyI4c4n147jsGiBW2s9txPrwQg8 MB1CNUXRhmEHx5Y+YuOnXNjFoCDD/dphHABmucrk0O8APrjuX7MdTOiMDesPoK1CJF1R NumXRbBQ4RffGmUY41CrWnK8x08AnopFAB/w/LEg3dqtCyknD29V2MdkS0cy71w2sHo1 1GSp2PvMFTuVZ5bx4Vx8iNDO3i/ZJujyQ4m8lxs3Z//26ZVGGy4humW9or8toFg/ZXk2 Idug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054364; x=1768659164; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=cuDJq9OcqlXOoYELFFiMxpUFbHiZNG+R5rDqqX2qwUQ=; b=ii/CKrtP82UnUgHU92oyLt4N5Em0NDzkYqYlvTm4RDtW2Y2dAwPFp+BSjkPszrcSUA EHIS+31xqrtBbqBEXjxTx+VhQGm6u174ELyeSGXyalcrdJgEIHgIdc2PcrwYO3csga6X XmakLhCWgAsir3n5fJiso7TGwVLGtbcAIm86pw5RyT2BRehJBxCNXP/kfQyuVZFBX629 QEihrQSWdbDkgmTmHM2noL1cjK//JxVuj3Uza9Jam1Je7Xjozszc1TZnqrQ3TLpVCuGl b3AFhPJ6idmGi4YOk0iD/zv2g4QD0/OWGEnF0GxzdsYxPa8APuqto4tyBS2E1LF3+UvH bEsQ== X-Forwarded-Encrypted: i=1; AJvYcCX1GID89ULobkA651ypQeVX2QIAh8kmbkzTkMgmHdJKogQq2NpsTF9+xJgSdkcxBMVi9BLk7e0id/ZNUy8=@vger.kernel.org X-Gm-Message-State: AOJu0Yz56balXxFto56H1JsJXt91rVC3l/hRKKMpE18rLrypq5Bsolrl dCbOySJ3r5vNJ76JRamyF9yQRziKC4f81PmMqgtsgy2/Ml9K7Uo4D8QA X-Gm-Gg: AY/fxX6trQvpM4Gs1grpwJmXr0skOb6Ir7NlzxdNB8DxlJyNssR3EA7QK8YnGtRTBHc 6uWa5Z+okuxC8Rpewupb+OXQqBdjQm7VqvdO6fld1KSH0GzYzbVThGLyc35TGWd/ZNEMUh4Vpcr /QI38WqkcuSWPtBVKUVIVkm3KF3dbpblw1KsDdF6T3VrG430z6cgCEWrSSw2enU9p7RTh3kUDyO LM7PBNUcS1hth4KaEtqTmo7MkwJ5ZKwOdkFrhs5wu4Vew7FxSP4rI+mBga1ViFriMjbZo77Th/t ZfMJQFhWp0/0rWHeLDE7XPGA3+gn7i/z8xk2czlhtQPDdfA/NqHmcMOEJqxW3ts33ER/DYkgAGP 3xkKVcDXTSJnNqasYxoll1lu2CJREMINg+2504f7t1cyAONlukDPi1OjKFSa641yDEKj0nl9KSr BxzCdJaoU= X-Google-Smtp-Source: AGHT+IFLWfpiux/Kh9OQtDcuqehT+WANU8TvRohmEzGWI5MjMm7PzROsSMC/B8nDbc23kmcVsN6PRw== X-Received: by 2002:a05:6a00:ad8a:b0:7e8:4587:e8c5 with SMTP id d2e1a72fcca58-81b80cb141cmr11319417b3a.56.1768054364182; Sat, 10 Jan 2026 06:12:44 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.12.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:12:43 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 07/11] bpf,x86: add fsession support for x86_64 Date: Sat, 10 Jan 2026 22:11:11 +0800 Message-ID: <20260110141115.537055-8-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add BPF_TRACE_FSESSION supporting to x86_64, including: 1. clear the return value in the stack before fentry to make the fentry of the fsession can only get 0 with bpf_get_func_ret(). 2. clear all the session cookies' value in the stack. 2. store the index of the cookie to ctx[-1] before the calling to fsession 3. store the "is_return" flag to ctx[-1] before the calling to fexit of the fsession. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v5: - add the variable "func_meta" - define cookie_off in a new line v4: - some adjustment to the 1st patch, such as we get the fsession prog from fentry and fexit hlist - remove the supporting of skipping fexit with fentry return non-zero v2: - add session cookie support - add the session stuff after return value, instead of before nr_args --- arch/x86/net/bpf_jit_comp.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index d94f7038c441..0671a434c00d 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 *fu= nc, 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 =3D *pprog; =20 for (i =3D 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_store_stack_imm64(&prog, stack_size + 8, func_meta); + func_meta -=3D (1 << BPF_TRAMP_M_COOKIE); + } if (invoke_bpf_prog(m, &prog, tl->links[i], stack_size, run_ctx_off, save_ret, image, rw_image)) return -EINVAL; @@ -3222,7 +3227,9 @@ static int __arch_prepare_bpf_trampoline(struct bpf_t= ramp_image *im, void *rw_im struct bpf_tramp_links *fexit =3D &tlinks[BPF_TRAMP_FEXIT]; struct bpf_tramp_links *fmod_ret =3D &tlinks[BPF_TRAMP_MODIFY_RETURN]; void *orig_call =3D func_addr; + int cookie_off, cookie_cnt; u8 **branches =3D NULL; + u64 func_meta; u8 *prog; bool save_ret; =20 @@ -3290,6 +3297,11 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im =20 ip_off =3D stack_size; =20 + cookie_cnt =3D bpf_fsession_cookie_cnt(tlinks); + /* room for session cookies */ + stack_size +=3D cookie_cnt * 8; + cookie_off =3D stack_size; + stack_size +=3D 8; rbx_off =3D stack_size; =20 @@ -3383,9 +3395,19 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im } } =20 + if (bpf_fsession_cnt(tlinks)) { + /* clear all the session cookies' value */ + for (int i =3D 0; i < cookie_cnt; i++) + emit_store_stack_imm64(&prog, cookie_off - 8 * i, 0); + /* clear the return value to make sure fentry always get 0 */ + emit_store_stack_imm64(&prog, 8, 0); + } + func_meta =3D nr_regs + (((cookie_off - regs_off) / 8) << BPF_TRAMP_M_COO= KIE); + 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; } =20 @@ -3445,9 +3467,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im } } =20 + /* set the "is_return" flag for fsession */ + func_meta +=3D (1 << BPF_TRAMP_M_IS_RETURN); + if (bpf_fsession_cnt(tlinks)) + emit_store_stack_imm64(&prog, nregs_off, func_meta); + 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)) { ret =3D -EINVAL; goto cleanup; } --=20 2.52.0 From nobody Sun Feb 8 12:14:21 2026 Received: from mail-pj1-f68.google.com (mail-pj1-f68.google.com [209.85.216.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C14BF2E0914 for ; Sat, 10 Jan 2026 14:12:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054378; cv=none; b=MB1Qkw//GdBlZeST8K3OBK5gLaMuGdqdqsS6IigrUVUdnUxWyhtdcodjoXV3WOs9UITZtkdTY/T2e0D4MYEYoimvyTDOh2PTqOAO7WVgNP9+1v60QiO30sZDMBu19/krWOl5G3DHmgct2UwSi6WvhDh1j5jhXXxdr4MHnwh8/g4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054378; c=relaxed/simple; bh=6BAjC/h/VbSD1F8qLcHMXta1kjnk/yDOcwCuMgQVEJM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Z4tUHv4VzHHMazvKG0C2uC+xjI4wUDE6JoZKO1BDclx3ffLWs2GZ/O1/ATKIcUnBRSDMuRu3urIznRsMHnfma7qdl1SIc1M7K+KirTMlApKTCs+IyIaRtKjil4nhEoNvnzRxbYwpoGKT0aR33jTE5euePa5H1ZryBbPLv806AZ4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RFjYEqd0; arc=none smtp.client-ip=209.85.216.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RFjYEqd0" Received: by mail-pj1-f68.google.com with SMTP id 98e67ed59e1d1-34e730f5fefso3685478a91.0 for ; Sat, 10 Jan 2026 06:12:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054376; x=1768659176; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wZvuCmGFnis+CKiifUfzQyTCYKAPuIWEe4J1fR1TapE=; b=RFjYEqd0etTf7GP00cXHNQAOfmOVeTt523/9B/PYw84T4R1f9ybOjY28di7DrnWcff ZxapC2OEaB2bzGPlcRZF/ojxH6bPjevLYRqAnc5zDQSCRRZq+Z7SZ6KxTdMd9h/Sy6Wk gX9ZckpnOtmItwehWkVYDcixsbCA5il1e5+G1Zg0hfA8Jnwq+xwwFmP12EPe1Hy4zhMy ErV35kqklnoQFx1q3d/x1MoPcriIN+8tpAS+IUu8kza9oFnq0XX/r7JAQ8IuQ2NA5kKr uSu0bSkz++KNk0W2lT5nYcGxEoch86DpxKkDcywvv17BHQOO0jydmo4Ja0Q12i45eZW1 o5jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054376; x=1768659176; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=wZvuCmGFnis+CKiifUfzQyTCYKAPuIWEe4J1fR1TapE=; b=MSjybJsKK0PKkATidelwwdg60IJ2IeCAqVSf+FN8u/KMCjh2OmbM5Hv0KH/LDj499I h7KnxC+2qJkaStJjeNCiKrEI09GQHONHvLWyhOgtkL9da9aZTD3er0Mj/v+jYi8ERfEw YAvatrG3Svd9reUwk5fgtPmT7Xd52TVJiRmeKRYzl4ng+b5orOECUVtasQnd+MQBbejU Xqx7gdKEVkATdLKqoseo62xRlO/M5XEW0V4voAeETtIPXksFenw/9WVd8ZL3+BBZs/u0 PS1nkC4klp7JJs1lSmyaKate6n6Zx5MQKjhGE7MAy4PXuAUIFB/CPZFMwtWrCOYsu7bO Ioww== X-Forwarded-Encrypted: i=1; AJvYcCV4GCbnH1/+3sF6RYqpxpRv80mJkheh+49K8vRTdSBOd0TKjnnsHSFmlhkQ+/auLuimvmrvB9Sm588Vzwk=@vger.kernel.org X-Gm-Message-State: AOJu0Ywo6EdjGY3WTwP4akWPCfKW/oYy+jRidnIYXV/vRyA+AEDbwmRz Cj2JI2yTutoE7gwUJumpcXnGigSkf3DUe6Y7LCyyclwRT5FufjW2fp7t X-Gm-Gg: AY/fxX6qApYvycuPwjPNnEia1iYIIHFoAVT9MqjgdG3kjiXD/uQ07bOIUs/6vQhj1yZ JPIZIl79/6mjKQJO6K7qrHil2J4Rq620A++BqE0DUGQcxspU3GQrtFXk5d6TBU14EMLzPOLO5Sc S8PnPsrjw9Mt1OVnSzHrMOUUdXbloIRuDydayIBYWRJ91RmXjON4Oy+N2KxMBht1JHf0XgWh7ap gEAFNqrGCbbbTvuMI8gu5zWMmne7UEdgvpjnSda1lHQKgFRvjQcfbLaYw6JtaQ7NQ+w4Hd4Cvb6 7ulS+fwOECX6qnQ04cV4egI4u64VJ4Sgejxl75zaT5aIIzScD3dKqHGQxzGmJgfV2ALpErBk85r Jnaz03FHswNfijPc2DGiYrYeR3rcM735N+fV31XJZb4cEeIDKXDwflg68GgLvFRjydz42UxCNoC fGZr7DIsY= X-Google-Smtp-Source: AGHT+IFGZ+bG8xHT9xuAISlyvfchDBAbNmG3GBwI/BYhtaOvoHEk8y+p5yfyCVS6FJeecUMzM+SSng== X-Received: by 2002:a17:90b:2692:b0:34c:99d6:175d with SMTP id 98e67ed59e1d1-34f68c30794mr11364698a91.2.1768054376190; Sat, 10 Jan 2026 06:12:56 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.12.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:12:55 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 08/11] libbpf: add fsession support Date: Sat, 10 Jan 2026 22:11:12 +0800 Message-ID: <20260110141115.537055-9-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add BPF_TRACE_FSESSION to libbpf and bpftool. Signed-off-by: Menglong Dong --- v5: - remove the handling of BPF_TRACE_SESSION in legacy fallback path for BPF_RAW_TRACEPOINT_OPEN - use fsession terminology consistently --- tools/bpf/bpftool/common.c | 1 + tools/lib/bpf/bpf.c | 1 + tools/lib/bpf/libbpf.c | 3 +++ 3 files changed, 5 insertions(+) diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c index e8daf963ecef..8bfcff9e2f63 100644 --- a/tools/bpf/bpftool/common.c +++ b/tools/bpf/bpftool/common.c @@ -1191,6 +1191,7 @@ const char *bpf_attach_type_input_str(enum bpf_attach= _type t) case BPF_TRACE_FENTRY: return "fentry"; case BPF_TRACE_FEXIT: return "fexit"; case BPF_MODIFY_RETURN: return "mod_ret"; + case BPF_TRACE_FSESSION: return "fsession"; case BPF_SK_REUSEPORT_SELECT: return "sk_skb_reuseport_select"; case BPF_SK_REUSEPORT_SELECT_OR_MIGRATE: return "sk_skb_reuseport_select_= or_migrate"; default: return libbpf_bpf_attach_type_str(t); diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index 21b57a629916..5846de364209 100644 --- a/tools/lib/bpf/bpf.c +++ b/tools/lib/bpf/bpf.c @@ -794,6 +794,7 @@ int bpf_link_create(int prog_fd, int target_fd, case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: case BPF_MODIFY_RETURN: + case BPF_TRACE_FSESSION: case BPF_LSM_MAC: attr.link_create.tracing.cookie =3D OPTS_GET(opts, tracing.cookie, 0); if (!OPTS_ZEROED(opts, tracing)) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 6ea81701e274..6564b0e02909 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -115,6 +115,7 @@ static const char * const attach_type_name[] =3D { [BPF_TRACE_FENTRY] =3D "trace_fentry", [BPF_TRACE_FEXIT] =3D "trace_fexit", [BPF_MODIFY_RETURN] =3D "modify_return", + [BPF_TRACE_FSESSION] =3D "trace_fsession", [BPF_LSM_MAC] =3D "lsm_mac", [BPF_LSM_CGROUP] =3D "lsm_cgroup", [BPF_SK_LOOKUP] =3D "sk_lookup", @@ -9859,6 +9860,8 @@ static const struct bpf_sec_def section_defs[] =3D { SEC_DEF("fentry.s+", TRACING, BPF_TRACE_FENTRY, SEC_ATTACH_BTF | SEC_SLE= EPABLE, attach_trace), SEC_DEF("fmod_ret.s+", TRACING, BPF_MODIFY_RETURN, SEC_ATTACH_BTF | SEC_= SLEEPABLE, attach_trace), SEC_DEF("fexit.s+", TRACING, BPF_TRACE_FEXIT, SEC_ATTACH_BTF | SEC_SLEEP= ABLE, attach_trace), + SEC_DEF("fsession+", TRACING, BPF_TRACE_FSESSION, SEC_ATTACH_BTF, attach= _trace), + SEC_DEF("fsession.s+", TRACING, BPF_TRACE_FSESSION, SEC_ATTACH_BTF | SEC= _SLEEPABLE, attach_trace), SEC_DEF("freplace+", EXT, 0, SEC_ATTACH_BTF, attach_trace), SEC_DEF("lsm+", LSM, BPF_LSM_MAC, SEC_ATTACH_BTF, attach_lsm), SEC_DEF("lsm.s+", LSM, BPF_LSM_MAC, SEC_ATTACH_BTF | SEC_SLEEPABLE, atta= ch_lsm), --=20 2.52.0 From nobody Sun Feb 8 12:14:21 2026 Received: from mail-pj1-f68.google.com (mail-pj1-f68.google.com [209.85.216.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 26502346A18 for ; Sat, 10 Jan 2026 14:13:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054388; cv=none; b=hxE+2quVdsk2UdNvNp0rMwbfvaX3Ajc2m8UQ8739Y13G9aIaXjv2XlsYTXvrElUzFpVFSCQ+xzXCRep0jUX+ToahOcGdL8wGXNEQq/mSTrbMgMqVFM/G7ark0uySpN1jYz9vb/T13Ovs8WluPtEelIf4ghjHTQlVOPcb6YfI6G4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054388; c=relaxed/simple; bh=Okg9SIzWIdxMYL9OMbZo8y/oAOt76F10doefVGdAQU8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lC4I6YO+Xy/VsEcGsknHuqeAASMPdyIzQowM2lfMFjQFH1WOu8dc6OtVW+uqJUSGJKyzBjKtoUk9ZlMX8311d7/bcIkvO8DzNo0souZgyDMC6IBPuPHg9LYQ8P/+7MY8S88lNLFBJA88IUGbDxpnw4HKXaF8O4iJej0ogo9YCrs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=P2Fllsc1; arc=none smtp.client-ip=209.85.216.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="P2Fllsc1" Received: by mail-pj1-f68.google.com with SMTP id 98e67ed59e1d1-34c9edf63a7so4165515a91.1 for ; Sat, 10 Jan 2026 06:13:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054386; x=1768659186; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QR5rrRd0ZsuEPPqW5q3lZCBR9ClfGRJ1620B6u4R4tA=; b=P2Fllsc17PcUMbduVMft5KaW+uAJL0sG6QdDhvD5mhUZfFBPxMOo46tQqzsQFTjMD+ 0NnIJoAePKKf+/HEw6AxAeo6MPBN3bc/IUsy4fxV0jQh+ELctfLovroNupqYgDRY5K5/ q7oPXd9xgxVGFpo24nVm1TUgmoNUvjXqG5sMWrK6YLHlNTyK0w/wx5hKTkY+wWoiV+o9 h4S4tigcDfXWpgs3HHb6fIMEKYLVwNnDbI/SUqracpygpoXDB1YFfWM6h1i4xsnqMytT fg+Tj2C6Kh4L0px6T0tjbJV9/0glkiBHdXC3xppsS7yVhYrAAkpvhdsXfGtI4VYmKbbz GAUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054386; x=1768659186; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=QR5rrRd0ZsuEPPqW5q3lZCBR9ClfGRJ1620B6u4R4tA=; b=Odf6/YmcBmecXywgmuNZwza6RjMdIleaEWCblXl9LSPDY5jveDh9KJwTbIYmE26V2b V3K2Qd55fvdIpNKy9MNREZ15fU5/qX80Th3pG8gLeo6OZFptr117I4OvGD2Ttm1Sn3b9 d6CXIWu17XFzLjDt3N2mWCYNYgYIHfmzg4eWHaSzeDj1si6xcDrP/4qmhQ9KlQsQQTW+ +z0I8pJnlYcg9aAEEsRCzV/7bWNdNGu/62MtJS3szPE1Gie5aDsnjtFzi0CtCO2ibiJF sAOVeqZOkx6nXIPgB6jN1L2Hz1BOJAkveNOtRog7II/z7QiG2HekNVf0oAus+P12mvHk S6Iw== X-Forwarded-Encrypted: i=1; AJvYcCWrkmRU5TeRVoSgXXK9hT/6sDeOTH1uIL7s2igcubsdfbJpC3LUs6eugnI2ZmDPdlqkYwS2tVVqChv6/Xo=@vger.kernel.org X-Gm-Message-State: AOJu0YyJOzAYiljNxKgwQ7L6WzHc9ZCWsuQJEwCvUEzIgyKhWlJ/Pgl+ qxAYLcqff23AZQPhnkt1689kigrEVIvaYP2gnrNqAQV8i+GroqQUVeft X-Gm-Gg: AY/fxX5MFeM9gQgilMuwSy7dlwvjaMesnnr/xhO8PWupdLz/7s/k5scAppVZstARFgF feoTtKafsL9XTeAhooHX1BNevfr9ewFhlEwIz9PeyHspCDro3JEoKyzLnmH+E2jdOBk68H/EBUh kbxLWRUh22SjwYHEUkFbhrQjPC7aPmKRgqgHnUBGnb0jYKxW+BeYgmmv5ABwItlAfAAmLs26Zvw 3Rg1/lvgQ1RKM8Xy+LiS6ekdjg847SapinwHeObAGK9N/GJ6GP1AJCQfaTFDjIYc62a1PxFI9Kr Nv6ZRvGdF1L+VSqdkQqrXtJIpSUYsB9oEhu91aJbWaPToFWJTmPQeE6yu2lsO/oFjw6bxsYORoY R8xmNZUDS/TXGD09w9ep+YjWh25t9MZvbjq8S5VdEC3nmBFhzle2+VftI2L1V7QWaXbamCMV7ps sh75Bg7y7zdda+SNXfTg== X-Google-Smtp-Source: AGHT+IEn+HozHWZxnnFJhS/KnptuMtU1nPh2Q3TwlqhZv2EqRCTWGbbvXEux/xaLbJxhfikKFzUSsw== X-Received: by 2002:a17:90b:57e6:b0:340:2a59:45c6 with SMTP id 98e67ed59e1d1-34f68c7a89fmr13085852a91.4.1768054386458; Sat, 10 Jan 2026 06:13:06 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.12.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:13:06 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 09/11] selftests/bpf: add testcases for fsession Date: Sat, 10 Jan 2026 22:11:13 +0800 Message-ID: <20260110141115.537055-10-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add testcases for BPF_TRACE_FSESSION. The function arguments and return value are tested both in the entry and exit. And the kfunc bpf_session_is_ret() is also tested. As the layout of the stack changed for fsession, so we also test bpf_get_func_ip() for it. Signed-off-by: Menglong Dong --- v3: - restructure the testcase by combine the testcases for session cookie and get_func_ip into one patch --- .../selftests/bpf/prog_tests/fsession_test.c | 90 ++++++++++++++ .../selftests/bpf/progs/fsession_test.c | 110 ++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 tools/testing/selftests/bpf/prog_tests/fsession_test.c create mode 100644 tools/testing/selftests/bpf/progs/fsession_test.c diff --git a/tools/testing/selftests/bpf/prog_tests/fsession_test.c b/tools= /testing/selftests/bpf/prog_tests/fsession_test.c new file mode 100644 index 000000000000..83f3953a1ff6 --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/fsession_test.c @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2025 ChinaTelecom */ +#include +#include "fsession_test.skel.h" + +static int check_result(struct fsession_test *skel) +{ + LIBBPF_OPTS(bpf_test_run_opts, topts); + int err, prog_fd; + + /* Trigger test function calls */ + prog_fd =3D bpf_program__fd(skel->progs.test1); + err =3D bpf_prog_test_run_opts(prog_fd, &topts); + if (!ASSERT_OK(err, "test_run_opts err")) + return err; + if (!ASSERT_OK(topts.retval, "test_run_opts retval")) + return topts.retval; + + for (int i =3D 0; i < sizeof(*skel->bss) / sizeof(__u64); i++) { + if (!ASSERT_EQ(((__u64 *)skel->bss)[i], 1, "test_result")) + return -EINVAL; + } + + return 0; +} + +static void test_fsession_basic(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open_and_load(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open_and_load")) + goto cleanup; + + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_attach")) + goto cleanup; + + check_result(skel); +cleanup: + fsession_test__destroy(skel); +} + +static void test_fsession_reattach(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open_and_load(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open_and_load")) + goto cleanup; + + /* First attach */ + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_first_attach")) + goto cleanup; + + if (check_result(skel)) + goto cleanup; + + /* Detach */ + fsession_test__detach(skel); + + /* Reset counters */ + memset(skel->bss, 0, sizeof(*skel->bss)); + + /* Second attach */ + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_second_attach")) + goto cleanup; + + if (check_result(skel)) + goto cleanup; + +cleanup: + fsession_test__destroy(skel); +} + +void test_fsession_test(void) +{ +#if !defined(__x86_64__) + test__skip(); + return; +#endif + if (test__start_subtest("fsession_basic")) + test_fsession_basic(); + if (test__start_subtest("fsession_reattach")) + test_fsession_reattach(); +} diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c new file mode 100644 index 000000000000..f504984d42f2 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2025 ChinaTelecom */ +#include +#include +#include + +char _license[] SEC("license") =3D "GPL"; + +__u64 test1_entry_result =3D 0; +__u64 test1_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test1, int a, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test1_entry_result =3D a =3D=3D 1 && ret =3D=3D 0; + return 0; + } + + test1_exit_result =3D a =3D=3D 1 && ret =3D=3D 2; + return 0; +} + +__u64 test2_entry_result =3D 0; +__u64 test2_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test3") +int BPF_PROG(test2, char a, int b, __u64 c, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test2_entry_result =3D a =3D=3D 4 && b =3D=3D 5 && c =3D=3D 6 && ret =3D= =3D 0; + return 0; + } + + test2_exit_result =3D a =3D=3D 4 && b =3D=3D 5 && c =3D=3D 6 && ret =3D= =3D 15; + return 0; +} + +__u64 test3_entry_result =3D 0; +__u64 test3_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test4") +int BPF_PROG(test3, void *a, char b, int c, __u64 d, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test3_entry_result =3D a =3D=3D (void *)7 && b =3D=3D 8 && c =3D=3D 9 &&= d =3D=3D 10 && ret =3D=3D 0; + return 0; + } + + test3_exit_result =3D a =3D=3D (void *)7 && b =3D=3D 8 && c =3D=3D 9 && d= =3D=3D 10 && ret =3D=3D 34; + return 0; +} + +__u64 test4_entry_result =3D 0; +__u64 test4_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test5") +int BPF_PROG(test4, __u64 a, void *b, short c, int d, __u64 e, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test4_entry_result =3D a =3D=3D 11 && b =3D=3D (void *)12 && c =3D=3D 13= && d =3D=3D 14 && + e =3D=3D 15 && ret =3D=3D 0; + return 0; + } + + test4_exit_result =3D a =3D=3D 11 && b =3D=3D (void *)12 && c =3D=3D 13 &= & d =3D=3D 14 && + e =3D=3D 15 && ret =3D=3D 65; + return 0; +} + +__u64 test5_entry_result =3D 0; +__u64 test5_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test7") +int BPF_PROG(test5, struct bpf_fentry_test_t *arg, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + if (!arg) + test5_entry_result =3D ret =3D=3D 0; + return 0; + } + + if (!arg) + test5_exit_result =3D 1; + return 0; +} + +__u64 test6_entry_result =3D 0; +__u64 test6_exit_result =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test6, int a) +{ + __u64 addr =3D bpf_get_func_ip(ctx); + + if (bpf_session_is_return(ctx)) + test6_exit_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + else + test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + return 0; +} --=20 2.52.0 From nobody Sun Feb 8 12:14:21 2026 Received: from mail-pj1-f68.google.com (mail-pj1-f68.google.com [209.85.216.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 05FCF3451AE for ; Sat, 10 Jan 2026 14:13:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054398; cv=none; b=amH9UxbSTB3TSOAdQk5Gv9/2Ap5Kvbftx4qUIS9/z2x2++MLWk3j6D9u80D6X/kNfq+1kDujh1QWRLpoFNH53VJr2Ar4SvF14pEheRZ841IqputJswbr1A6vLg+8nYErbAHEdchR10Fx0NlxwnLLbNVbD20vVNEsuzsAmSD8sps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054398; c=relaxed/simple; bh=gXCuEnHLqfXsAH6FAwsjxm9SB5MyEaZI5cp68UEcCxA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=qYgjeDHwg+fByWutEjB5FDcMR5zorYqxiVjAqsmYWgGl28XaYHoFxH9CAUAgfoFvgJgheIXPEh1D90cLfwv+FAoc1+uQzjmtWwCmT/irDCS9DMqg8gX+8z1Z508vBFDm9B8pRd102EIKm/8yaluy09gbcYnL3x0bzxDkWuJKhD8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=AyQt6RlD; arc=none smtp.client-ip=209.85.216.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="AyQt6RlD" Received: by mail-pj1-f68.google.com with SMTP id 98e67ed59e1d1-34c3259da34so3152880a91.2 for ; Sat, 10 Jan 2026 06:13:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054396; x=1768659196; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=V0oqk3QUBfKZsQ1aXSAR/rKLECXiTolyzvGw8W9Eifk=; b=AyQt6RlDNs+uqwnxX/5qWaa96aotiR0MVIzcR6pJrglwwoPdJ53Wd2DU48qUBwOXOA EDsAGialjUClSuMU6DTdbioJpRLpXwNdUQyXnz6vNgq+hZcpXDqtjIdb6cBqCxyoEJrI AhVsMXQHJZ0786My6nm7p2n1YHIObRAY+ucfshyEyNegi+zDoqivm6cY4Z5xUxWNbJ7+ dcYmnnvgZJSW3HWR3gSivLXFzL9OkIcs5tvxOuq5vSsOn4BuPbGjLAWIQBsMDX/vbNTW OkA/ft5D0xWn2IwLs+QuddxyZCNUwh/1jC32GiwMrqDl2dD9ugG1ag2lDAiiozzU/4dc dtmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054396; x=1768659196; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=V0oqk3QUBfKZsQ1aXSAR/rKLECXiTolyzvGw8W9Eifk=; b=IllLGhERfQu8uH3Ce5wkxQRU+phnNYM4d493zCT0YNWuoyy3kNuT9ase24gQLja8xf 9QLL2/wTUshj/dfBan5NRvRy2zppU7ULJbgJOrVFWzv5vawtJG0CsWTIULX9m4bBRkoY dBaBxA/f8mpe3X8gN9lHsAlW1ChGQXdO+Fb0KVSAArhxb29iR2SbDa2TcWWK+YDinh8q 2oW5v7iS7BhxiUkmtVaXMhwh8FK0OhxwSGoFq+rjX9HJrWJbazFCHpGhfXM33/Qb1bMm tm6dxuLiuS4SiwEi1AbEnXIHNZd6+rEsHukdwHlmkhFbZeQq6syn3m5KvS8f+e9aCNkZ xzRA== X-Forwarded-Encrypted: i=1; AJvYcCUmql8DOXEoxkHTl3VshTrOkjzF3S2Jshe+Fy57XocmhTDxtpIG5sMDECEQ5S5tBq97xx4SD/VLUkSCyGg=@vger.kernel.org X-Gm-Message-State: AOJu0YzuP8AQ9W4CPLAX0xasyrsH3fe3NfzDvM0Fu1Y+kyutraAUJ8Ah +55C9/exVjzjlgMO+ncbxFiv+od/Fbaw4IQy+IvP0Mb8U81Jj0tyJiSG X-Gm-Gg: AY/fxX7SOo9ZgawAJHKxy0n2QoBiXSTSOZlcVR1p/ZKVs31zh6vTl8hWzBModqSh3rn uUBbHD/Qa+wsOh++hCD/Pw4bRdXmF3tElI9jK1WZyvnZNAdytST5W2dJajtWw7KQN27rwBRbqgG P+ydgR1QoL9TEZ+NBuy8jMyaFkGw0+EEaU8csgXupci9XGPbKYniJTGY5lmWFUsjHmU3dEuuR8J jN2rNYssqQSe1b/peT850CjGn5cNrV7N43/aSSBKnPStTt1mQGgT3UM20dW2hTBkhMvBN6QyBul RqyCHofZMo2MQcX/AHuxGAmFN147B57QkCLqDcj2S0CsaBlaIPSKvw9FuTHavZ1e7bzsTJ6km/y zHe8K/y7d+HpfjA+vSv1M78hPXp45sQ+fvtlkkTostoUQ5SZKRaG2LkCob/OkRYqWm+Zoedld9S MJmW0U8KwwWn9Lh3ABxw== X-Google-Smtp-Source: AGHT+IEm7VhbnMXmVox9xOg+CjqsU7K85YOVbAC/1coBNdKuVTJAf+ZFE4/LT/Ud++6Q8KkUOQoKvg== X-Received: by 2002:a17:90b:57c4:b0:34c:a211:e52a with SMTP id 98e67ed59e1d1-34f68cae46emr11853633a91.27.1768054396410; Sat, 10 Jan 2026 06:13:16 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.13.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:13:16 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 10/11] selftests/bpf: add testcases for fsession cookie Date: Sat, 10 Jan 2026 22:11:14 +0800 Message-ID: <20260110141115.537055-11-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Test session cookie for fsession. Multiple fsession BPF progs is attached to bpf_fentry_test1() and session cookie is read and write in the testcase. Signed-off-by: Menglong Dong --- v3: - restructure the testcase by combine the testcases for session cookie and get_func_ip into one patch --- .../selftests/bpf/prog_tests/fsession_test.c | 25 +++++++ .../selftests/bpf/progs/fsession_test.c | 72 +++++++++++++++++++ 2 files changed, 97 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/fsession_test.c b/tools= /testing/selftests/bpf/prog_tests/fsession_test.c index 83f3953a1ff6..2459f9db1c92 100644 --- a/tools/testing/selftests/bpf/prog_tests/fsession_test.c +++ b/tools/testing/selftests/bpf/prog_tests/fsession_test.c @@ -77,6 +77,29 @@ static void test_fsession_reattach(void) fsession_test__destroy(skel); } =20 +static void test_fsession_cookie(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open")) + goto cleanup; + + err =3D bpf_program__set_autoload(skel->progs.test11, true); + if (!ASSERT_OK(err, "bpf_program__set_autoload")) + goto cleanup; + + err =3D fsession_test__load(skel); + if (!ASSERT_OK(err, "fsession_test__load")) + goto cleanup; + + err =3D fsession_test__attach(skel); + ASSERT_EQ(err, -E2BIG, "fsession_cookie"); +cleanup: + fsession_test__destroy(skel); +} + void test_fsession_test(void) { #if !defined(__x86_64__) @@ -87,4 +110,6 @@ void test_fsession_test(void) test_fsession_basic(); if (test__start_subtest("fsession_reattach")) test_fsession_reattach(); + if (test__start_subtest("fsession_cookie")) + test_fsession_cookie(); } diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c index f504984d42f2..85e89f7219a7 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -108,3 +108,75 @@ int BPF_PROG(test6, int a) test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; return 0; } + +__u64 test7_entry_ok =3D 0; +__u64 test7_exit_ok =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test7, int a) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + if (!bpf_session_is_return(ctx)) { + *cookie =3D 0xAAAABBBBCCCCDDDDull; + test7_entry_ok =3D *cookie =3D=3D 0xAAAABBBBCCCCDDDDull; + return 0; + } + + test7_exit_ok =3D *cookie =3D=3D 0xAAAABBBBCCCCDDDDull; + return 0; +} + +__u64 test8_entry_ok =3D 0; +__u64 test8_exit_ok =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test8, int a) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + if (!bpf_session_is_return(ctx)) { + *cookie =3D 0x1111222233334444ull; + test8_entry_ok =3D *cookie =3D=3D 0x1111222233334444ull; + return 0; + } + + test8_exit_ok =3D *cookie =3D=3D 0x1111222233334444ull; + return 0; +} + +__u64 test9_entry_result =3D 0; +__u64 test9_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test9, int a, int ret) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + if (!bpf_session_is_return(ctx)) { + test9_entry_result =3D a =3D=3D 1 && ret =3D=3D 0; + *cookie =3D 0x123456ULL; + return 0; + } + + test9_exit_result =3D a =3D=3D 1 && ret =3D=3D 2 && *cookie =3D=3D 0x1234= 56ULL; + return 0; +} + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test10, int a, int ret) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + *cookie =3D 0; + return 0; +} + +/* This is the 5th cookie, so it should fail */ +SEC("?fsession/bpf_fentry_test1") +int BPF_PROG(test11, int a, int ret) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + *cookie =3D 0; + return 0; +} --=20 2.52.0 From nobody Sun Feb 8 12:14:22 2026 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8B8CA340262 for ; Sat, 10 Jan 2026 14:13:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054408; cv=none; b=D8JgtejqCdTPjPjY0QP/ESZSDX3cVj9tui16nck73TMzdAyWoZ4TFvFMDGLWXEQ++2SQBVtlJ9MYHdNw5rMjSWJvUdDAtLJlUdDcYdOsR4xWWIQEld4lHZkVX/ZBV8AvXBEwEtRsmlPyrccOOX5Jz1bUVA2/nmSRI5yFbAsq9Qo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768054408; c=relaxed/simple; bh=agW6uKNys5gOeoTrVORTjBOaAxozAsYVc4VUeEIRBqk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YvJpsGFaDxc3zUjlNlzDtt3C3QIKzUERc/mjlICp3iaWenx+OYYWAfqeunx2O5u1TGpJOAK/21POVzvNPzKyRm66nGWhBpcmm3LG3LH/OeQyNfyijLqtp/IFSpxF2ikKeH+K9VjEqPWFWUaPiHNSSMnb0wZGafwI5/NsxvQHkHI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KwTu+i8v; arc=none smtp.client-ip=209.85.210.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KwTu+i8v" Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-81f223c70d8so694758b3a.1 for ; Sat, 10 Jan 2026 06:13:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768054407; x=1768659207; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ft9yy1vLUwNJD7u+x5LfWhJWNGjlertbzF816wc1jaU=; b=KwTu+i8vVe4PjPzD2MKoi/yFtVnu3zAxaXFSXwm7eO8SoL0aSTamAdrmPLoPOMQ4K6 0TEJ2F8hs0q9fvTBikL2RsWZwgrbr8ipb3hPfRZXeL7fzOZMMofCs9sswusdXD6d6pFk RtB5MACqzQt+/ewRh62x7dy0HDBPp+BlkQqvdJU40VOi7rpnzCZx5cTK7mka90xPylJD YDPxAIfoHElX6TUTETfYStS59e8VgRKW4QEveUhZFOv8DmFtoEOgtUKPf9oX0Z6jkRoh 70kLf3LHLzW9zc9MHEuSumoas0OmuJjdUHzl5rZMaSntJJsQcW+2DMQ7pTrXLrdX1I74 UjLQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768054407; x=1768659207; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ft9yy1vLUwNJD7u+x5LfWhJWNGjlertbzF816wc1jaU=; b=E68e3NStA3/xzikbwA2Jjzw2zhxEopb7ucCStxwuAlvooCQUxncfinIBPsBfMyfk/+ eaxKbnciFUVE0BgKwv2hpieh42PMBw2vtRHMrgefYErRuVQna6m5ihNo73s4hG7/nsH+ vTopdgWTHQ+O5dC66+xTZb+H0BlMM7/FXXkIUhUBalRJUn9b0uVAhYiZ1l+WAewGloec 2o7wiOvprUl1LFmLdgDIHB22szo9FOwGZ1MeRRCmxoN8tq+XgobRB+HHP1+3VsVSW5RJ 41kBG00lAQghZjMuTUDh0FkdDVVs3uSb1cvZ4Fi2XKH4K/ICtx6sQTuWx9Mx1o5nKIrm TP/g== X-Forwarded-Encrypted: i=1; AJvYcCV3++a7Z3EHlIDZeebJtf8eTAsBSl2qAldBb8vodrIxbIGW0w4kwdzh3/YFdsJKt4RMoCgMICPmUSZ1+mI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx/nqNlhm1PdSSmRVXVLJo7Ci2WvjVxoZSu1OF8Al/Or1kMA0E2 YRTgLFS/wQrH4crGSK+M0uc5vjxcvN+lbLrZCMeugGiJgHA1ENOENxAs X-Gm-Gg: AY/fxX7LauSh073UfQNBro2aemJhffZM+qxaNoxkHGYe+FhJSJg6yX4Ekez+VPXx5rg oUUyBA5Yvfe8ViNisYg7gG5azAbG1Sb1brt58I73Bz8TXNvQ1069RA9HfiTEvFXE7dYhJ86lsOK DE2FBYuPHYm9whLYN65ntZ0t6nXlE/flYjfFGFvcyBZnfWQM8rJeBQyG3sLQ6GtPJwwSm8MzhSO 24NpbcByAKm7Gq1mIkMxh45Jio6AFZdjrFsSxBjm5QFHRsf+FAV/0dmxH29ZjjYFxFxOSi71Uwe KCL+vyzLyj4MBwYbBbqUaW0Mh5IS6MH9rVoPPNOiTt9sN76jlbzd7FMGE8/VS/ErW94DVnXGEUi mWUUF1T2gvKrv98mcKL833iPX2JpJ6iOMPgYS/pIPZKPDRcbHovWepbxHbnXVrBu48zMYsd4po0 XyWlHkGhs= X-Google-Smtp-Source: AGHT+IGlvr7nkz2s+OAg6Cq422OLetEIPAeEPAoKEzaZnt/qGoDTuQsWGmx5xIko0mpEb8nDogHi4w== X-Received: by 2002:a05:6a00:ab85:b0:81f:1a4b:bf55 with SMTP id d2e1a72fcca58-81f1a4bc2a9mr3208433b3a.39.1768054406977; Sat, 10 Jan 2026 06:13:26 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-81f42658f03sm1481079b3a.20.2026.01.10.06.13.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 10 Jan 2026 06:13:26 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@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 Subject: [PATCH bpf-next v9 11/11] selftests/bpf: test fsession mixed with fentry and fexit Date: Sat, 10 Jan 2026 22:11:15 +0800 Message-ID: <20260110141115.537055-12-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260110141115.537055-1-dongml2@chinatelecom.cn> References: <20260110141115.537055-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Test the fsession when it is used together with fentry, fexit. Signed-off-by: Menglong Dong --- .../testing/selftests/bpf/progs/fsession_test.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c index 85e89f7219a7..c14dc0ed28e9 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -180,3 +180,19 @@ int BPF_PROG(test11, int a, int ret) *cookie =3D 0; return 0; } + +__u64 test12_result =3D 0; +SEC("fexit/bpf_fentry_test1") +int BPF_PROG(test12, int a, int ret) +{ + test12_result =3D a =3D=3D 1 && ret =3D=3D 2; + return 0; +} + +__u64 test13_result =3D 0; +SEC("fentry/bpf_fentry_test1") +int BPF_PROG(test13, int a) +{ + test13_result =3D a =3D=3D 1; + return 0; +} --=20 2.52.0