From nobody Sun Feb 8 11:40:29 2026 Received: from mail-yw1-f193.google.com (mail-yw1-f193.google.com [209.85.128.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 7A8A72C15A9 for ; Sun, 4 Jan 2026 12:28:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529728; cv=none; b=I54pjqbrRRJD6sH+9Ci8151sCGy/ch7kWKyMrQyXLCs6TNNY/LkXMO7kvQ39uFmJTkde8MT3S67kUryQNRiyAfSB3NkkHGwwNb0DJcBZtmTqRNZ9AQoslO1psUL+RUJFF2nqFGqwRcdFrjVyscMXZndMecPhS5tEpM1Wn3bIwak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529728; c=relaxed/simple; bh=jNm9bhkvt7baNwqIKwBWsV2y8q+5qpWWAiLG+QJ3P6o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Rpd/FXvcVj8xcx+5PFOEnqQvwef04M7rhLJzmY7cMksTZMn372TJnj2megmj7roMruACyFyhrjIJ95ll47aIIPweTgEG89dfU7uGMmKGklk1V2jXc/sTYo7pYtv9Sj9raPgjwXqsyZXG8Bp7vLuAn2VoaXzIVAsK9w5Xw52DoVs= 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=gD5QCYAh; arc=none smtp.client-ip=209.85.128.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="gD5QCYAh" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-78c6a53187dso98295237b3.2 for ; Sun, 04 Jan 2026 04:28:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767529725; x=1768134525; 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=GS/Awj/bKDuMidtlO0YXdiJ382lrIR29ce4hyeJjXKg=; b=gD5QCYAh9gQ6gARvH8fwS2oI+CIAdIBH2m8YElm6LNZ+72qlbX1V/huWPgLB7Lwj+I WquQlii8rpqp7dp0M4jJObf8kjtOEOH1ceMO5bAyHjlOjZCDs2inio6jlS2zhQbbUu+j yQRE/J5Rz76OpjEr3W9vJe0binH5x9Iymgr9BUXGRUZ6NtMGARDGSGMRffhXNMLKIjzu 392FFeka9yhC6e+PaLb4Xegvm4xgb6mdyWpoSuWRMR8MwlCmp8ebqUuvAjum8017TlmK T1GK3lSgC1G5/6oefi/rNiRZmfBggMwIyVmlHfi4/RsHS82ast/QucgqKzZuRHEnGPl3 GnmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767529725; x=1768134525; 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=GS/Awj/bKDuMidtlO0YXdiJ382lrIR29ce4hyeJjXKg=; b=SS7dFwNOnnwGzHa/ibv5LY5ZKgl5tls2p7WLBBqQ4rDyAVgWySjls5LFPgqoptY+c6 KanqzHdLtW+9cJh7gV2HKxpzvJqLGruIe9njH+qrM21Q45ZcvPIWjVAQHq0rhYbf46wv U+hHhZ3XHcxdxQES59V/Tq1JbyhZjjQV9uyk3eJssEWhKyShCq12h2t74CjJPFo9zGp0 Ul/3AVAWjTYEouP+DtcOmp5r6A7Ts7aFAoEcAvhiw0jiszc0geQI/snxnPOhBhwiD2cy iidH4YeBnCHWaCKlDPBnqb3yifi8AXXboYQi8is/y0iPHS5fjooapnQFKz7VMFrdT2V7 8E0w== X-Forwarded-Encrypted: i=1; AJvYcCXqEIYZjeA8/NkEZwWlYxMIaa8qaOGv63lCrCUshPnCgygn0+Ye+sQcIX+vxiQwqzk6uqjgA+eN86hdvkQ=@vger.kernel.org X-Gm-Message-State: AOJu0YwMagcAcDldtOG8j1NnbRfV21QjRyES1F7BB0mh1omlajlxjVqg 4AYtlJ5WO1a9xt1alho+yB+A7MQDruU741ONjQFdi/mXbzqc49CUZLhq X-Gm-Gg: AY/fxX5hrvHH2MpP1z/cWGCNymd3Y04S7JxZUo7n3D7DavBiZp6OG9ULWjJ3cZOSLGP cEBwOTO5Xem66MfDtt47Lz1EGGWy4+46S+lohBkpQf3q92mt1ZtUROHNJB6+E/6fFCfV1VbDWgs 1slWp2EkATRXOMirrRvt2vfuwqbHK+nsPGpAvKZJF2e739amAO8/r5i62g9lr6YOWzZH4Aso6+7 SOocsSV2SXlAEC54lVqIa8hW/8rlIJkFxMyJ/pNr0OSMd6sh4j7NSh0Mp+o5VdDEhDRT6HhoyH6 fsfuX/IlhVYhh+A1nS2mjvDzy6lZflKiYDn+hi8m9deveBLSQ3GwKsq6MH51cFV5nv8l7OqiMZr ogLV6FDz9GeOF7Bc/kw7r1ihs5beNf0E8pTeU9K7bhcS+6nr1rmAkaVsoU0PUDrusTzXXEYuo6W qDyRUXZLk= X-Google-Smtp-Source: AGHT+IEijcTO/DQp9Pz2lVmQ6NHSwrPX/yP+1+yGa2fhr+XTewy94lQmGFtojIUsAG6y3nbkdgLr0w== X-Received: by 2002:a05:690c:4b07:b0:78d:68df:81d5 with SMTP id 00721157ae682-78fb3ecc2d8mr423577837b3.14.1767529725351; Sun, 04 Jan 2026 04:28:45 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb4378372sm175449427b3.12.2026.01.04.04.28.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 04:28:44 -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 v6 01/10] bpf: add fsession support Date: Sun, 4 Jan 2026 20:28:05 +0800 Message-ID: <20260104122814.183732-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260104122814.183732-1-dongml2@chinatelecom.cn> References: <20260104122814.183732-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 --- 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 a63e47d2109c..565ca7052518 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 84ced3ed2d21..cd2d7c4fc6e7 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 6dd2ad2f9e81..64f6eff02f9f 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -3574,6 +3574,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; @@ -3623,7 +3624,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; @@ -4347,6 +4362,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 9394b0de2ef0..73bbc614b30b 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -17393,6 +17393,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: @@ -23290,6 +23291,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); @@ -24234,7 +24236,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 @@ -24249,7 +24252,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 { @@ -24333,6 +24336,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); @@ -24499,6 +24503,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; @@ -24580,9 +24585,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 6b92b0847ec2..012abaf3d4ac 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 11:40:29 2026 Received: from mail-yw1-f195.google.com (mail-yw1-f195.google.com [209.85.128.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 1EF572C1780 for ; Sun, 4 Jan 2026 12:29:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529743; cv=none; b=bk+PR4WUDYuoNc7HQSLY4A4mnHU5Kqko48VSFmqts96YLs5RWRta9NXPapjinm3mLYGJiJRq1g06lWeXQ+gTmaClLn8VybU/xsAuxWINv/cY73uxmhN29hiKBNzYcSG1qF/cr5DXLJorbVgAFVz7KhEt+Rf1XQrQioIaNAQx+QI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529743; c=relaxed/simple; bh=pAETjXWpZpYYNO3eGlGRlwZoeWkTRREEUUQ8BUqcr3o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=neh8/6lJ0TMarsU6hEqyGLDT8ueCKdRb/Z+H2tRmECM7Aj3GxJKGwMsRaNcAyOdrqlMQ9wgvegOxSyPt9GV2QPnFypcyFZknfW2I+TJYvDU/oCUfFPPHmRwBL1nVB99WrE5rk8qOkg7BWGQbCcmzqVbOEDt2aTeKgM3vtuhor74= 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=U+7mtTlJ; arc=none smtp.client-ip=209.85.128.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="U+7mtTlJ" Received: by mail-yw1-f195.google.com with SMTP id 00721157ae682-79045634f45so42506157b3.1 for ; Sun, 04 Jan 2026 04:29:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767529740; x=1768134540; 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=yAXKhyEP0882HZb20YoTIK/vIaotqaiLJ/ObnPk+VWU=; b=U+7mtTlJsQDj7lOOg6L2UQjye3cFt23PqQGCRDugBvM5b19QcUmf5BGSGx8XtN6+qB 2o4ImtO0H/YnlvpB88+5qZoSweNEnzIdXORxY8KZNn1HHyGq2K+Suv7Bl+ORT9af6Xz1 XmiW5bKYqobRf6PcR1idHdH2Gc3+MQ60jOrG9QF/VJAkuHvJbMbZnalI/f+v198DWco4 Q2H5KY4RWqtiu9/WjWj6WV6yeFn+MECqMOTqHIrcNGlBnrpjrI65mhJNZyum3A7CySjB KJ9lAvoQzO3hsH1CmMMzJ6m34jLYT6pZyefWT90wRsY4gCsq0li77bBNOnhQPRR6JDZC ZHqQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767529740; x=1768134540; 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=yAXKhyEP0882HZb20YoTIK/vIaotqaiLJ/ObnPk+VWU=; b=plAmQYqAGrXR038MEREdqly/LwJ+xatFQqidWxW0nKIblRa5EEDEZP1YfUAQanwsJO TNneU8NpzC1+PvI5TEayY2VI64r7UGtRTTc/BR466ri//cQZ4SRG7c7/tBteWaVlb3jc rqeM66tZi4GfCQvGQaDTmSBSA7Kyel+/2zbALuRo1JGF8feaEGqTAxUrkzoCBHX41ood 0jmbFa9IE2giD25nEA3dAijIDsa2go35g7mZKbTuL04ZbK2iKMkuHwzwnJRMirjRn0Cw UNI7kFrtnAIWeiHvgOmfF78wppnKwjahQN+TG/9w1ccHPLSE+EQdKQZQZrj7m8MprC+R k45A== X-Forwarded-Encrypted: i=1; AJvYcCXkpLXbYNuy0oKK04f7y7waTROLydA0HaIJ1bhrTol4/SjSXCrNLS88BJ+gI5pgkAZU/eI+CxrmIiq5QIw=@vger.kernel.org X-Gm-Message-State: AOJu0YzW46M8SNiWNu2EoDwAv06+G+3XjE5uOvm2jA6e0gmpcghjLOWx aH/W9mXSoOakqrl5madrGRNwTSeyFkLFYlZcRumrYLoWW22wx4RsQLmO X-Gm-Gg: AY/fxX5U0pHQGQL20e3czXUBk55TdcbyGo+P1FYwKV4US1Oit4E3gZV62ibkZSbnm4N cw8+oS8AGaZ63yLCPCeP+P4IMv+4rR41HjHWu4HxWEK8POI232+i466h5ZPwK78skkQDIcrJKQW xDCcn7ZSJV65BK7gvbkY9V3PIeGtff1SJOdcIP2G1yYJtWWvefzUIxIc3v1m2lCMOy9y6nu/5yt aT30hbwpJY9N1Eb9qD8GZFl169W++Loqo6+0WFaUKaGYt2YlB8rbiAP5S5x3ilU6FVTkE2bQptE x6b/ETHpH2hBJVY4BjxIOUrVEDYBV5mEmFNTauegD62/3ry+Z9S32zgaZJclH5u1ezxQdpme3Xh 8/R8KmMs64RzrIrALeP2+F1VeI0vrvGMpfUtU20fe5QELTOyYHSvXobrA6UkSqspk0dsZrHTLw9 KSTEL40hQ= X-Google-Smtp-Source: AGHT+IGEUgq48tppi2m6NPzTsxshV9CUixu/YIdrRgAr0ZCZbEOXwj8vabjB2KTFArscytze2Urwfg== X-Received: by 2002:a05:690c:2607:b0:78a:27a9:d471 with SMTP id 00721157ae682-78fb41ddd3amr363530327b3.69.1767529740002; Sun, 04 Jan 2026 04:29:00 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb4378372sm175449427b3.12.2026.01.04.04.28.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 04:28:59 -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 v6 02/10] bpf: use last 8-bits for the nr_args in trampoline Date: Sun, 4 Jan 2026 20:28:06 +0800 Message-ID: <20260104122814.183732-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260104122814.183732-1-dongml2@chinatelecom.cn> References: <20260104122814.183732-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 --- kernel/bpf/verifier.c | 35 +++++++++++++++++++---------------- kernel/trace/bpf_trace.c | 4 ++-- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 73bbc614b30b..9e7dd2f0296f 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -23267,15 +23267,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) @@ -23295,12 +23296,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; @@ -23321,8 +23323,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..6b58f9a4dc92 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; --=20 2.52.0 From nobody Sun Feb 8 11:40:29 2026 Received: from mail-yw1-f194.google.com (mail-yw1-f194.google.com [209.85.128.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 A05C71F4190 for ; Sun, 4 Jan 2026 12:29:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529752; cv=none; b=TxYZ7bVVdclF3XgBhguAUfM659j/gBT3A7Bb0REIY88Zo0DR54UQq/RCqM42sb+3TCSBuKsY0h7cIENuhxuUgP5kg4yg/wDydpLkOZLDt+E3/qsA1aYr+hnZeaLBCXo7wFzyd6C4q0A9jXzu5DBUcjUdUjjfKWrXTZsTljO1CBs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529752; c=relaxed/simple; bh=e9VHlm6n7hVwJkXAyd+w0i3/OabKQu+CT+qxcSN8VMk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=acld4pGFlHNF6QMlh/AV/meeMCswIJ0O/oH9a+VokIM7utNG9xtCnWIKxs5FN+497J4SOlbgUGtDo/h665JRnOPogsuIKxWimHauICxUuWreL/nqYPgEOD1j9zXlqATXvXl1RLw8NCL86YGahbuOXJSnKV9vTY3CbE08aIol1z0= 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=fv0c9l1n; arc=none smtp.client-ip=209.85.128.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="fv0c9l1n" Received: by mail-yw1-f194.google.com with SMTP id 00721157ae682-787eb2d8663so14710027b3.0 for ; Sun, 04 Jan 2026 04:29:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767529750; x=1768134550; 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=jeLX9Qb7FxErvthvcRCs2SbJfJEM0Z2UtyZWl6yDR8g=; b=fv0c9l1ndXBM+oIbu73oRmhdnsBPPKKh+s66CwAB+uaPCs67LTa9gvHT542iDbs2iv SqsWZ7DVaBvw5C6Mbh0WfpPyMuI7ONMDKvVO/v38HFj63nNvp4W+0j/4fIaA6nqBsKFW DLy2gql80PQwyhW2wA7hkqresBuKWG4AJle+1gRautl0F7nY9Eq1p3DMW+zWNUc5o5Tc u8ek0KIYSXmg/sL0GDrTXQ/LE4zUCpad6a0afeZF74proLyz2mWpLj6n23ABr7XyiaGR FcyAFWzKztvP6q3+RGbNvVP9cBi+YvO5wX8LdYgB+6DBdAFcUI+w+HQ0uzskkAvoLSr6 XtLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767529750; x=1768134550; 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=jeLX9Qb7FxErvthvcRCs2SbJfJEM0Z2UtyZWl6yDR8g=; b=Myy+iCuhUyOsvs9H40IcwNFIBcwSBHqoJwgZJvQujbrwf3+IYRXBX/SYymDzRH6tzE C1sk1VZNgZRJCgjwrZ8PwP0LdvpFcLOBZzQkx4I6RzuxkkPe7rbZFcm4W6elbCF6aEmA 8uli7ouFPqULXkRSQtf2TELJBBMVeivPqQU7T0ML+O9cN5FiYoAGfj1+X/IuIlPDKe5Q L8/96OgHNl+h/KHUaDF1POO9JShE4TRLBlIMhpGL7/Ys1M2kD7KFVrFroBDRiY+Z5d4x mElZDs5XuVUDkJP4cRvWq3vZ3rHZdHyd7aS/dft+Zc3ROgC+2TQ9YE4/8UIt1jpzWCUh hxHw== X-Forwarded-Encrypted: i=1; AJvYcCWLmspMgpqWqE04YAggJZibOU2U8qgs5uHSLRhYLhykHEd3VaXlbrpj2D9Zs3RH3wbi3vhyrg26z8aNSxc=@vger.kernel.org X-Gm-Message-State: AOJu0YyToriRJAqYfkZ8YI1lbAkmqED6wRoXh1TdVPIdIwKTBi5BV2eV oyICBrZ6pnocwqRjRicoAKyZJdbsvRF3qkdeO7rXE2ir+E+cFuWzkDoD X-Gm-Gg: AY/fxX4Bd6WIkKLJAuZYinUJ7r4pwLwEbIXR92teNVd3hcrgliAUXCD3TXM9eZVeioZ eDRkohg2tkKxxqDSGY3YQbTDXoKHv3uxvgsF3WZOC+YhsvCNplilOY7fdKTjNQxZxYJ88xly1+k eIK+OpRQ0mhD2mJ+cXzPIOM1Bt66fKe7DiQ0QiLN0/MU02kjALfal4/rOLdS58VqN3aahK/3Bro dqwNi1kHYIyzIvkZzTWfBShD/0PKS2SnGSHgJiRAkHPqZNFQ1tEWtK/PGcsUvZ5ALZh+kp8Ygyz c/dWiA1cCZK2Ty37gzQhqmJRHAW+wJBAq1bKR9LsIhDq2tGeDbIkFtMJN4ZJyfv6y15y2xnZpE7 YdAAjIjF1moFAtcTaj8q3DmB5IJOYDuhrplErPprO2dGETz1XcZvbxXaJisZJByYP/yX/nDjW0m Wx9FMWrXluqfUG6b+ZUg== X-Google-Smtp-Source: AGHT+IGkUlFO4z0/g19cOG2YiYyn/dQtce3ZzXHBdsMotbF8XUgoRS6HZP38KUsbyHhpRIIGLJ8tYA== X-Received: by 2002:a05:690e:169c:b0:644:44d2:a9cc with SMTP id 956f58d0204a3-646e33312abmr3461150d50.7.1767529749663; Sun, 04 Jan 2026 04:29:09 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb4378372sm175449427b3.12.2026.01.04.04.29.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 04:29:09 -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 v6 03/10] bpf: add the kfunc bpf_fsession_is_return Date: Sun, 4 Jan 2026 20:28:07 +0800 Message-ID: <20260104122814.183732-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260104122814.183732-1-dongml2@chinatelecom.cn> References: <20260104122814.183732-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. Introduce the kfunc bpf_fsession_is_return(), which is used to tell if it is fexit currently. Meanwhile, inline it in the verifier. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- include/linux/bpf.h | 3 +++ kernel/bpf/verifier.c | 11 +++++++++- kernel/trace/bpf_trace.c | 43 +++++++++++++++++++++++++++++++++++++--- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 565ca7052518..de6f86a56673 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 9e7dd2f0296f..0a771be6cb73 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -12372,6 +12372,7 @@ enum special_kfunc_type { KF_bpf_task_work_schedule_resume_impl, KF_bpf_arena_alloc_pages, KF_bpf_arena_free_pages, + KF_bpf_fsession_is_return, }; =20 BTF_ID_LIST(special_kfunc_list) @@ -12448,6 +12449,7 @@ BTF_ID(func, bpf_task_work_schedule_signal_impl) 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_fsession_is_return) =20 static bool is_task_work_add_kfunc(u32 func_id) { @@ -12502,7 +12504,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_fsession_is_return]) return KF_ARG_PTR_TO_CTX; =20 if (argno + 1 < nargs && @@ -22548,6 +22551,12 @@ 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_fsession_is_ret= urn]) { + /* 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_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 6b58f9a4dc92..d6f0d5a97c4d 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -3356,12 +3356,49 @@ static const struct btf_kfunc_id_set bpf_kprobe_mul= ti_kfunc_set =3D { .filter =3D bpf_kprobe_multi_filter, }; =20 -static int __init bpf_kprobe_multi_kfuncs_init(void) +__bpf_kfunc_start_defs(); + +__bpf_kfunc bool bpf_fsession_is_return(void *ctx) +{ + /* This helper call is inlined by verifier. */ + return !!(((u64 *)ctx)[-1] & (1 << BPF_TRAMP_M_IS_RETURN)); +} + +__bpf_kfunc_end_defs(); + +BTF_KFUNCS_START(tracing_kfunc_set_ids) +BTF_ID_FLAGS(func, bpf_fsession_is_return, KF_FASTCALL) +BTF_KFUNCS_END(tracing_kfunc_set_ids) + +static int bpf_tracing_filter(const struct bpf_prog *prog, u32 kfunc_id) { - return register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_kprobe_multi_= kfunc_set); + if (!btf_id_set8_contains(&tracing_kfunc_set_ids, kfunc_id)) + return 0; + + if (prog->type !=3D BPF_PROG_TYPE_TRACING || + prog->expected_attach_type !=3D BPF_TRACE_FSESSION) + return -EINVAL; + + return 0; +} + +static const struct btf_kfunc_id_set bpf_tracing_kfunc_set =3D { + .owner =3D THIS_MODULE, + .set =3D &tracing_kfunc_set_ids, + .filter =3D bpf_tracing_filter, +}; + +static int __init bpf_trace_kfuncs_init(void) +{ + int err =3D 0; + + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_kprob= e_multi_kfunc_set); + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_TRACING, &bpf_trac= ing_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 11:40:29 2026 Received: from mail-yw1-f193.google.com (mail-yw1-f193.google.com [209.85.128.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 17B322749DC for ; Sun, 4 Jan 2026 12:29:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529767; cv=none; b=ebgIwEfq4jlIp72fOrOGza8FQRWiQpUcxPg4IdAMyoNlIazUUDcXUEarD1i8dxMcsl+OmeVQZI+cEJn/cfVR5aF9GyYQx2wPSQXFGKyOqRlQ4uZKUnBXWhbgSz3cgSCauSc2DD8dlJGjMF62zFR8rROgnHtw+MT5Nk11Tq8X13g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529767; c=relaxed/simple; bh=K+EU/S4XNqCczE5NOitx3rx5MF3vZYRuMMv9sYvUq2g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MZvYzppAx17Vfb9rEucpMNrlS8yk0GYZepEZegaKKBcB/7o0HCKeP64GrBnCSxMYP2+kWBtLEnGnIhQit4qSUlFKbrl+aMacOD1kt4bPYl1yxvtakdtO2XY3BXK3bCtMih2nALMPnvCr9LFY9vG7b9naB3V7sUQuZVNnN9gzsE8= 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=N0hXhPKU; arc=none smtp.client-ip=209.85.128.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="N0hXhPKU" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-78fc0f33998so86383387b3.0 for ; Sun, 04 Jan 2026 04:29:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767529765; x=1768134565; 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=SjpuND+cM6PNH+whys9cSmd7/ZmHiaSR1eTVw3ZGpU0=; b=N0hXhPKU+Zvo86icqIHMAyNtmKE7TtNoWxwL/q/NsoxL/7FLD0rbGkJe7omVMM2SGf 9GD3UKC8eIeS4abKhMjRGHtt11ZGU+Azww9nE0y1/myFg9GV6id79lhO8OcPgzPM6K9O z5oNsL/2BGBLzUq1nzki27GxRostnAY6UEs1WE2MoxATFkGJjbIjUm2EJAQL1VMW/Ljn 1+24lMPYmZ1vSTacISW7ob1/FpP5zGNd7Gkct+do6zxQQqkj/CeMyJvAqpgX3Ix+kPQJ JSgd2F1Ha+5ptpWmmY0xOOpxZmQf4P5hMVlqpr1B2bgS8jZYfHi0XJ+zPwKBqvz4NdeV JBLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767529765; x=1768134565; 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=SjpuND+cM6PNH+whys9cSmd7/ZmHiaSR1eTVw3ZGpU0=; b=LzNO9hl1L/L5f4Z415xJjK4VPet7H2bIyNq22AqJTifnIbOXEx23Iy72osZBzgnVGl knjAIF3wgDKx58Hf5Becb07i0IrZMDJ/4pO5UDt6vEIKB+xjPwy1Omiq4gQJGxvJBzmW uSCmlkUZ6SK9OOio4MzWWGEcJd70bH4J+BW9M2vosa0BxEiXPkFV+LMznrXnAU3EW/Vo Ob/DEL5mxIleNcoQdDB8L0fBVHu1HkvPODCjU7b908iLN6PNcwkJKdxbjmrb8k8LSLHm /OyvqXYM/FGU3mnU4p45PjO9mw05b/Z/etx9vTObeijyLMuVwtMMPW0agwizs0svQOv8 i2kg== X-Forwarded-Encrypted: i=1; AJvYcCVBzJ3Yb8xmxhgqkGveyM/epxFativHoI21+DRKrU//DS2Fj9HoUHxXO1lWbqHFQ7AFHJHJIU39cVGzNTA=@vger.kernel.org X-Gm-Message-State: AOJu0YxELZ+YYqAhUtOWVHvYOsoPl420DHtkweCgjvhJ/GALwUUSOsTl Gu9S6e7/CHU3QC47vv4odKft1rjpBa6N0HNoiyf93hsi4zGoBZwi4CK8 X-Gm-Gg: AY/fxX6xHpqSCDN88wSrfztNm9qia9qu5s+ay9IKM9BD/537QWozVFmtNVfbTLiyeC/ 2ivyKKemYOz1vbg1ZouQRY7EIunbLqbpyMB8WO+jvrjprk0ZA26AV/++liAH9mESPn8BR2ANA6P CL/9PSYtZO6psJ1TJOi195FWuGASJpdJ+qf1dTa4xxEFGDkLEXI2FehSN7i6nJQ8aA7PMB+xwTk H4LEHYARinO9X81Hw+gOMpICwvWGebVO48x4BfQUxboIYiffNA11O52zT6L5T6DkgbJnHi/+foG qe+VQuFfGnusgnnyMboZd/2LGUw6Pg2XzdYv9phTMjMdys68mvO4tazJep0EWUJrE4DqZlkTm7d lI+qCD2klhwJBOxnYQqHltPFpa7FFWas0tt1n+r9LcL83nwVxAZJvpPpVdeowhrGQ0HOFM8eSAp mpEpWMi6JG5blA7y55Aw== X-Google-Smtp-Source: AGHT+IFE61D8Ekii1BgyPXdmbHdTo+gvI4aNQG4564OpeAhpj2Qrl+e5Fy8EIIPd4zle35knweXVow== X-Received: by 2002:a05:690c:7309:b0:784:88df:d9d with SMTP id 00721157ae682-78fb3f040efmr784710007b3.2.1767529765001; Sun, 04 Jan 2026 04:29:25 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb4378372sm175449427b3.12.2026.01.04.04.29.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 04:29:24 -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 v6 04/10] bpf: add the kfunc bpf_fsession_cookie Date: Sun, 4 Jan 2026 20:28:08 +0800 Message-ID: <20260104122814.183732-5-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260104122814.183732-1-dongml2@chinatelecom.cn> References: <20260104122814.183732-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 Inline the bpf_fsession_cookie() in the verifier too. Signed-off-by: Menglong Dong --- include/linux/bpf.h | 15 +++++++++++++++ kernel/bpf/trampoline.c | 13 +++++++++++-- kernel/bpf/verifier.c | 20 ++++++++++++++++++-- kernel/trace/bpf_trace.c | 9 +++++++++ 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index de6f86a56673..988ec1e34e83 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_fsession_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 0a771be6cb73..e3d7a0fbf4c7 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -12373,6 +12373,7 @@ enum special_kfunc_type { KF_bpf_arena_alloc_pages, KF_bpf_arena_free_pages, KF_bpf_fsession_is_return, + KF_bpf_fsession_cookie, }; =20 BTF_ID_LIST(special_kfunc_list) @@ -12450,6 +12451,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_fsession_is_return) +BTF_ID(func, bpf_fsession_cookie) =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, 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_fsession_is_return]) + meta->func_id =3D=3D special_kfunc_list[KF_bpf_fsession_is_return] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_fsession_cookie]) return KF_ARG_PTR_TO_CTX; =20 if (argno + 1 < nargs && @@ -14000,7 +14003,8 @@ static int check_kfunc_call(struct bpf_verifier_env= *env, struct bpf_insn *insn, } } =20 - if (meta.func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]) { + if (meta.func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie] || + meta.func_id =3D=3D special_kfunc_list[KF_bpf_fsession_cookie]) { meta.r0_size =3D sizeof(u64); meta.r0_rdonly =3D false; } @@ -14284,6 +14288,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_fsession_cookie]) + env->prog->call_session_cookie =3D true; + return 0; } =20 @@ -22557,6 +22564,15 @@ 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_fsession_cookie= ]) { + /* 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_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) { diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index d6f0d5a97c4d..b4914ceed8cc 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -3364,10 +3364,19 @@ __bpf_kfunc bool bpf_fsession_is_return(void *ctx) return !!(((u64 *)ctx)[-1] & (1 << BPF_TRAMP_M_IS_RETURN)); } =20 +__bpf_kfunc u64 *bpf_fsession_cookie(void *ctx) +{ + /* This helper call is inlined by verifier. */ + u64 off =3D (((u64 *)ctx)[-1] >> BPF_TRAMP_M_COOKIE) & 0xFF; + + return &((u64 *)ctx)[-off]; +} + __bpf_kfunc_end_defs(); =20 BTF_KFUNCS_START(tracing_kfunc_set_ids) BTF_ID_FLAGS(func, bpf_fsession_is_return, KF_FASTCALL) +BTF_ID_FLAGS(func, bpf_fsession_cookie, KF_FASTCALL) BTF_KFUNCS_END(tracing_kfunc_set_ids) =20 static int bpf_tracing_filter(const struct bpf_prog *prog, u32 kfunc_id) --=20 2.52.0 From nobody Sun Feb 8 11:40:29 2026 Received: from mail-yx1-f68.google.com (mail-yx1-f68.google.com [74.125.224.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 2F9B015ECCC for ; Sun, 4 Jan 2026 12:29:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529784; cv=none; b=r7rljL8ytgLocwj4dLIlqEXlWFloTzrXSUlKVo6aykPPX3/99jp+FbE5Bj9oFUxB1T0uvTwIIqcwub2CXxreVEHc1ldFfjqBM2s5mOKCVJP54wOlYBb+k3obIoQ8xCmJI1RYNu4IsDY2rXeYG8Ja3G8tqPUJ0j7TfOh4n/i4p98= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529784; c=relaxed/simple; bh=Vk+W6eyr2IUQD5U+QNmcmmn6L3jEBra1Cbetb1uK2cc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=H9G5n6zW0PnM9xN61FEdoG1/cRrxihuDOMVApDuf/Sye711RwUfhRbrmUqQeySbOkeq1Ut8nEE+9DINzQUQ3o3xzRTmVNhxZe5hfL4hzOBd9BUwFyi2v+5mBruQmVwbWFCaq2hWaLWB+pevFDlCMkZdiY7a+Twfn2YsIuIAKgFo= 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=HwEi3rOG; arc=none smtp.client-ip=74.125.224.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="HwEi3rOG" Received: by mail-yx1-f68.google.com with SMTP id 956f58d0204a3-64661975669so12707396d50.3 for ; Sun, 04 Jan 2026 04:29:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767529781; x=1768134581; 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=u6UQnELg0jWNEfAf+zm6n+6F3yec3GYQzyGkx+3yxZQ=; b=HwEi3rOGl6rs7txLQ4Yv/AkTui8CkINcKNwZzquuNTQS+kF3yzQpJ2DWZT52+YW16/ GUKIkmT7rx+EVAuNqfY+s7GKEwRUID7s1JNqceE8rN8hD3HzTb3uT56srz5wXXe9kSBb l1qosiDkixwzlcXkhn/44sBzdqrRPk2acLWna3R9Kyvsz97Qq53AKilPNATiKAlM/RaF WA2+ciI43D+2IKNozAdC7FkXnysFkoEn9SIQqrc0RNSxGXfRoOoSmsI2z8XKpDAN9B36 23783O5HhrW3dhefzjo3Irg6t+r6RXPmYFB0rT4luSXoOjNbVveU266b9zOFiyAAX0bk usDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767529781; x=1768134581; 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=u6UQnELg0jWNEfAf+zm6n+6F3yec3GYQzyGkx+3yxZQ=; b=QV9mtNflc0k9TaDLSwRJ8i9bep03LkWQnjQ9wuM6THPpspH7Zy2n3+GFOvVUoT9YXx YYOjBLnMRk8HtadEeCDrxTBocEZSVmisufLRlz024E1o5rowDvubqMHLnHBN+IdH4sJu e2Y3gqtJq+l12QpzVd0m7S0BvQUs7TcJ0YEKSLitRhGoNrJoPj5zRwooechN9yepU04h xgdCV/z8T39ey7GIDwVkBQZ3RnipKcyaCH+vGTZ2bq1U3wc4moHvD285mIZsy/2hXf2Q pnIvm7tiRvVnmUtmGFcAyQ7eL5B3Kpo26hMrdj/6kdyiQ+5Rhty6kncLyIMXgmY5F0nP lWRQ== X-Forwarded-Encrypted: i=1; AJvYcCVFBwpQC1e7l8/c1n4o/XtSOygya1lc62VT/4zwwU/ofjCwolQXmdL/OgAy8Io+ad6NdHBC7IxdPRVXAUo=@vger.kernel.org X-Gm-Message-State: AOJu0YyHH2BEE6HJqzEhpZzmojcTFSc681NkV2tzVWm83U47SLYCm8vJ htscbImYaDYxYCE99xcpG+//dhS5TzQW/RrWJAy2tURPS0AGTLvO/SrM X-Gm-Gg: AY/fxX7ZSWiDVB/oq3cDJbMj+snq0shgRtMhcjfEzcxmVB7DjUgvgmCfBalupugcZ6P HdoBJSRYJq6ypoBEZdRbLVYoLe3hZ3TXctoCcLfgKT2QBVNrnAhhMmkBPPwROvsqMD+sfSbbc2o Xig+JsWIhgBxg2JR/HlRoszzWjQ9SNlA7PDGZ4oVNLmdG3bEAy4ncC56A6PjqXg0RCAQJ5kJmaK xxWnrxM8lcw8ytAYo5UvSAomXUvxtqavEdeg74VThszfCr8uvolMMdk2KMK95uabZPBieq4euNL OiEnmpLrRC/m0m9Zqay9qwB0bAXD41UbWphX/ZCvMgTsD8kUV2qT3r9wrUmi0y9gFy/VCrt51f/ tOdO/6+fsWbZdxRNcyJytboMCMpPUb6DzsCO2dCjtNF1qYAjLJQduOGQ013tQ3Ye6RwwRVLJ0AV bApT8td4A= X-Google-Smtp-Source: AGHT+IExCIUIES0rpnVBP5Dw4YstZJa342yIXF0UaDhHyPx4G8VhE1josRA+AJAHrW7AJglmeJ+vqA== X-Received: by 2002:a53:be51:0:b0:644:2e5b:410a with SMTP id 956f58d0204a3-6466a901132mr28541542d50.71.1767529781214; Sun, 04 Jan 2026 04:29:41 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb4378372sm175449427b3.12.2026.01.04.04.29.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 04:29:40 -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 v6 05/10] bpf,x86: introduce emit_st_r0_imm64() for trampoline Date: Sun, 4 Jan 2026 20:28:09 +0800 Message-ID: <20260104122814.183732-6-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260104122814.183732-1-dongml2@chinatelecom.cn> References: <20260104122814.183732-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_st_r0_imm64(), which is used to store a imm64 to the stack with the help of r0. Signed-off-by: Menglong Dong --- 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..a87304161d45 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_st_r0_imm64(u8 **pprog, u64 value, int off) +{ + /* mov rax, value + * mov QWORD PTR [rbp - off], rax + */ + emit_mov_imm64(pprog, BPF_REG_0, value >> 32, (u32) value); + emit_stx(pprog, BPF_DW, BPF_REG_FP, BPF_REG_0, -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_st_r0_imm64(&prog, nr_regs, nregs_off); =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_st_r0_imm64(&prog, (long)func_addr, ip_off); } =20 save_args(m, &prog, regs_off, false, flags); --=20 2.52.0 From nobody Sun Feb 8 11:40:29 2026 Received: from mail-yw1-f193.google.com (mail-yw1-f193.google.com [209.85.128.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 48CFF2DF703 for ; Sun, 4 Jan 2026 12:29:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529794; cv=none; b=ULCSVvsVbg/rnXYgsCtTKh+ox/4WmHt+mLM+PxTBPVRTZLgiXTjb7PI+rNswmziDe0umX9McGVd8lvgWqmLpP/HX6zOVq+psX7V2dZTc72/LMDvmRhIBmoKqHPBiMul1I0T4Nu+/xkgT3CP+NBRH00clWvjVFNx9wwcelCIPyEY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529794; c=relaxed/simple; bh=FMOyT2WtoZj5GSbKWSpfrSKT2Ekxp+5FC9qIXMaK4n0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mUArc0l56tTITTXfOHB7K9hVuBtpgvNDqoJjf2E282YujDvVL3aj/BwBlTbzaFVQJHrS6H/lCGTWGl0XssWaW/QCPo3x5UcfReBILPSqEIhYfQDfHwgu4xagDr3S2gug4iXDQNDq1PkFf7xdbjMt4XUbTxgqmS69Y9HZ13VzWFQ= 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=g06vRdSo; arc=none smtp.client-ip=209.85.128.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="g06vRdSo" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-78fb9a67b06so104345407b3.1 for ; Sun, 04 Jan 2026 04:29:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767529792; x=1768134592; 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=Pr7tMYsR2JGMfEpVgQtpV39godrpJucmD+wd8yWbP/Q=; b=g06vRdSorztjQm3QuQNmBxlX2zUUrp/TykxlMA7+PlztuNu90oPeNCall2jpaFiyVt /iNuQbMOmI1FoKSIID8/Amz/CIdVPny/4b8xMylIAXblrmwyE9SO5INWEHrQwwKLkl36 AhvL7Dp8nNM4h1LlIJ58ZwpLz60HqYgiFkQa3KF+bhZ4qSDS7DxHuNr7rl5yQ/qYfQdq ov6LW13Uojkl3O5JiRMbG3WCyY2LMWpty+gcfIUz+z9t60wG6y0bSEoD6301BWb7JfVe r8CuHfKJqZb1szYK1bc3+s6nQbCf1KeoWZGH6RR2ZpHBi7ltGums2y69+Ak5GhS2aFGD AmnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767529792; x=1768134592; 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=Pr7tMYsR2JGMfEpVgQtpV39godrpJucmD+wd8yWbP/Q=; b=VnauIE6tQJVJQOBQNsEO1HWDbKxb1e/sfgK8Q4XC/WO5BnGrOQwUReMHqAj8E+11cC WaoCVwwKwdwB9EpPPu5YBKxGFhQcekxJpRSezdfzeIKKiRPfaF2kJrP6MgkyjZQZ1ZY9 aUeT9Q0nBlsFKKtuEzz5ZZ5jbYj/lEXDxWfNJPBVj36kvS0S8fvYKH+HkGYt01G2e5dC F8EWEFYQpHylw/jmYZ36G4imqUdb/Ol/KjmaZsfG497TPIVGvMthpSQD+MObLc5RvcIO 4wB1qjwhNQ6bQM6Ry8Gm4PYqwSkwBld60oWg3BaZLGCPHT7NKXK6kyHbmVs2N04Yc0JI zgdg== X-Forwarded-Encrypted: i=1; AJvYcCURBV5ni+AG/Ihp3muHXS6ivc+FmHpgGTIl/8CNDXBdjC3+62UG14pQ3I/pjvO4qQ/ThdkClVlcw9HDaNI=@vger.kernel.org X-Gm-Message-State: AOJu0YyOJiweGQdhCAqoTrXuR7Od87gIwZqo/c/kTp2AxMUHr5vWnmLz qzIg43Imr1uxfWCPCgBjLcTs/Jl9qzh6ljGny4H2f31hHMpWVvbOhXIi X-Gm-Gg: AY/fxX7qmzENNzDxOBdsPEeWATxd0U47j6wkMAAc9YH6q/6r/bfBcHPVAwRVyPtVMSy c4Mmr4tfpH/w9bpipfn3vm+/iV9HWJelDW36Bvf6iZwS2TpUT3zlKmceUCofu97zJwEHtpDBWi2 t2YXnfeAfM14BW8ffG6tOwjJndxH0oHTgMNKYEDm0gv5VpSRUKfGw8QGiV4VGZwhX0ZRWYc1ZEp LIWMij/DTCnEf0WiI8JhxGT2760tnF10teEC5BRIREIZlNhUcjP500vK2Lq5d1V9XKM5B8KjtfI B0M+UZYzQ237GIExbNEfVb6b58dxsXtpGqjrtlihJJqo+iykjNjisg+DSxYgoNQYZ7g5RYVX8Cs AkjkWE8SXoKF2ZIf5BrCiXf71vkzDmqTjxe5gYfMVEPTC2z5GD921iPP22d0qr3Mri5gdTZmcA7 KlbFLiIuGLYkjmdk0w7A== X-Google-Smtp-Source: AGHT+IFWsPPNOFkmP83/8Tlkyzlfjee4irbLtWjYbMjW/LbqU0v4Eor4AUNnqcQx4oiYMPks/Jfp2Q== X-Received: by 2002:a05:690c:64ca:b0:78f:86db:bef3 with SMTP id 00721157ae682-78fb3ec89bemr449311957b3.11.1767529792287; Sun, 04 Jan 2026 04:29:52 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb4378372sm175449427b3.12.2026.01.04.04.29.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 04:29:52 -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 v6 06/10] bpf,x86: add fsession support for x86_64 Date: Sun, 4 Jan 2026 20:28:10 +0800 Message-ID: <20260104122814.183732-7-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260104122814.183732-1-dongml2@chinatelecom.cn> References: <20260104122814.183732-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 --- 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 a87304161d45..32c13175bc65 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -3094,12 +3094,17 @@ static int emit_cond_near_jump(u8 **pprog, void *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_st_r0_imm64(&prog, func_meta, stack_size + 8); + 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_st_r0_imm64(&prog, 0, cookie_off - 8 * i); + /* clear the return value to make sure fentry always get 0 */ + emit_st_r0_imm64(&prog, 0, 8); + } + func_meta =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_st_r0_imm64(&prog, func_meta, nregs_off); + if (fexit->nr_links) { if (invoke_bpf(m, &prog, fexit, regs_off, run_ctx_off, - false, image, rw_image)) { + false, image, rw_image, func_meta)) { ret =3D -EINVAL; goto cleanup; } --=20 2.52.0 From nobody Sun Feb 8 11:40:29 2026 Received: from mail-yw1-f193.google.com (mail-yw1-f193.google.com [209.85.128.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 944FF2EFD86 for ; Sun, 4 Jan 2026 12:30:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529805; cv=none; b=hQaJh8IKpSMsNaiUrO2edjhHCVApRxLSSX95ncoUGhsBg7ybmeZhqjHTOhuFg16TQCjnfPSQzaymQKiHEcQbQr2BiTeUx7o50LJHRSJphsKRTzjvohIMlKsG8vC5rZI9EQdcJeE0k4qj2wEbHaJR4VzuFocEUOdsJ7LPMwfatbc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529805; c=relaxed/simple; bh=5FPTTn8VrDMMCi8rzKPPkNm4Tds81/hDdgqt5SuYt/M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dO+Ro6eHVspxiSil7EhAuDzV4t23VUIYJXT3HoYiBjP2hMT2UAEhgRa4IwAU4JfzxdA1x8deSAN16V1O0OAO1Y9QqsX8wTl75mUnsj/g85+qyqq8QNYi7yi6HwxB1gHV4TuoZDkNQhmbxd8oVFTtKSTFVUpM84XfRoRVFErlnf4= 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=UR56goIp; arc=none smtp.client-ip=209.85.128.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="UR56goIp" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-7900ab67562so59072617b3.0 for ; Sun, 04 Jan 2026 04:30:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767529802; x=1768134602; 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=MKy0X0XlxlcjI1cU8qAHOVK/4C53Fmoj+OMhrX6dTQs=; b=UR56goIpoA0XLk1UFsPiGrsvYV1N5KeYERJ6Unhjzp+cHm0NmK2HgBDzCz4TVCtrNE ALdVggr6LHR5Cqdn9LRcLXV2zA3+fKLxxUFFBPCmDqP6zas+onUo/EKJ/aRE8kLppTn7 Y8dmhQxuazBKL5ZD8X94V/+5VWpcMEasTjnIQNgS0jvsdx90sWsRjsbvXaTTc92qmbN2 gd5lVm74Hh5h+Tq9YEqLBBIImFgzwjYsUYfZvs24jA+kzWHGjjP+DSANPMHIshAyfEu8 rZiceBa6nPxENOHPxOYiuVXk86XRit4nDz2vcsD178tUBb97z7f6isD7K/sJ7pk2XFZS lzCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767529802; x=1768134602; 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=MKy0X0XlxlcjI1cU8qAHOVK/4C53Fmoj+OMhrX6dTQs=; b=AVOB0eJ5p6hvilwLs3SPRhTkjYwhSxDlDRkDAjDl5AbU2uzibfGECx+6+BAEo21xCp Tr6dnyyPmzryFU95RHI8c0AYSVq/iT4O0gDMFjhUDKWpV33QfhlVvET9O0x0HER+E3iS PDgQ9Hq23na5hN/LIQk8HHCDDVElWSb73dW/HvX7WcvUc3j27gmAhGSPpD8TI3WWr8TS wT8TdhbAx+2caxZvyHNaERGkgnff4+HLSqCihy1mWA2raZfTxMzNw8LeYqCbQgdQZP8j 6wfDLFnJ2/lfX2iPWJ+vWenpVz6kht2Hqq0aBD++hB6jJJ7MUwPMtN+NGlY442kBQFWn 069g== X-Forwarded-Encrypted: i=1; AJvYcCWVkaFDt2k+Q3Librf938/hoboJOORdDq6wXagygUdaXYHH2eV5DgeECg5tL8HfnS+DKx+p+SevoELitQA=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1JmDu4DitGKHcfQ8TQNNh9ZzycUTNRI73tJeeeUNhEhZSetrt 4xjAo6Rz5W7sMN2uU3jylLXxzXQ1KP7Tqg4p41g5A1lvHrFU21cMCiA2 X-Gm-Gg: AY/fxX7eWXsGlkyXZjNgfsOlXAXJjU8H/vt9BpkoSG+Yqu4aiDykMFqz0fRrhck21LV z4a/vboDBnpfHPAtS/XPubcYPNxgiyYhzYOQFoTyRS5OXiaQgn8s/JVS/jNMUkOLHurNewJWY8c YJqvCffqo16jDLDjJi5waHD/UalxsDqhs5hxgbMcH5Bm4GsFPNlvFiUFROOTOYfRnKZjiVr2+YW obNetQooZm76lTd/Zjda/npuxnNIflrutGj6Td+dIh9zodeUpi8cI0Tlfj0C+1wGvOOXvsImMX+ Wbkqio5kGEMpcCi8GED7+Bn2ZwNMSlamxTvuV7K308cYr19h4KgcnpLRzTnLKwBRO2YudEV0+Bf Zgs8KYwrgotfhi86g1APohIMg8MtQ/K22QfeFcXNEZ4ZdMfB4kz6UFK2z6ayEepbra2vdL5AGfK q2wNWV55Y= X-Google-Smtp-Source: AGHT+IF9aWW/XLWaxSzp1Z0Y+8CoeSNf0aI2UoJSmKodmODLwXZzd5seFMY7pe0MwU57/c3Mxk/1Jg== X-Received: by 2002:a05:690c:3513:b0:78c:7ee5:4434 with SMTP id 00721157ae682-78fb3ed3008mr368580467b3.10.1767529802261; Sun, 04 Jan 2026 04:30:02 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb4378372sm175449427b3.12.2026.01.04.04.29.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 04:30: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 v6 07/10] libbpf: add fsession support Date: Sun, 4 Jan 2026 20:28:11 +0800 Message-ID: <20260104122814.183732-8-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260104122814.183732-1-dongml2@chinatelecom.cn> References: <20260104122814.183732-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 --- 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 1a52d818a76c..89d6f45ef058 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 11:40:29 2026 Received: from mail-yw1-f196.google.com (mail-yw1-f196.google.com [209.85.128.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 B0CAE155C87 for ; Sun, 4 Jan 2026 12:30:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529820; cv=none; b=J5qHBQSRGo3p1Z47jvwYCStt3hnbZIx2Dqhr4OFyNpJ7Wr1302dvfySCMOJnusiU0UliG6Lmfdtegvly0EpnE/pnpd9QeIP1tHdnlVTJDCXLZ13VKzkm2VHWB45DHD7G2Lgjl8Cmu34XnX+WmYVluyuiZy1DlL5wWrXU0QcroUY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529820; c=relaxed/simple; bh=30IrruSBttNJv11mnhPPFrDbo5C5jVGpYPadqyOEUcg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=afyCBaWHEKodn9dOTnYvNv88UtzNtqbixo1P+igSwupHEwWLe0Kvx3aMCKDCzfyY4ZUeWk29+mP1811c8HNvnlFQyTxc6Nb2OE3Pvx52QctD3dxou7he/QXh1lbI7zNCcdp8h8/2HrvqDtMNVY3uMVI/cGbqMS/mHqqZ2FSZqrI= 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=bxyI1OfM; arc=none smtp.client-ip=209.85.128.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="bxyI1OfM" Received: by mail-yw1-f196.google.com with SMTP id 00721157ae682-78fc0f33998so86385967b3.0 for ; Sun, 04 Jan 2026 04:30:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767529818; x=1768134618; 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=i4Bxr4OZff+AEQ0Kvht+WX5RF8ZeS18xbuX/dUJTalk=; b=bxyI1OfMRLesF6qlo60Jj8Gu8mJ6w8FhRMqlL/MS0XcJGmr8kxBII9nUgkDuRsclOK UALToxRGu+KuuKHkL1WxfRxYuEHT8Pse23BqLmV7o3WvNwnESnjzcZEvcVBJdkciHduF SYPa0xUUJvNI49loWwNVq7P+feX659v7Rf6JbsfvwJkXzL9ydn/qJLN5QyoifVilkdIA xxdcEMt5bh2O7GNZVWQ+CZogQL3o7kdgOH6iNn+w/IRoVhDiMVcO6g1bsX3+STIhR6zd peDF7MLmkUuK2e+y3oxj1mF2bWb60vx43oZB9jTFNA4kGiGE4JRfQIo5S8HCvAdZpeFp LRIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767529818; x=1768134618; 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=i4Bxr4OZff+AEQ0Kvht+WX5RF8ZeS18xbuX/dUJTalk=; b=VyyhUbElZ+1ABmOTh/wUvdYYisgxLLZiFXDRK9w/hS0I988cZDJFNo02yyPK8ZkFXs VNFFG/D1VU420//Ol74942arTR/f05FrAs+Turk5c19HU0N8BL5GwXfwIL3QiqChqH7R Mu/K+2T1BwDyCk7zCgHastX/hGVxBVC2+Edz6IfnpPChT9/z1Bc/hpqekemBOzLtc9fl 1NCRAU5ieDZi3Nx/DJQ0D3mXQCpMNXEhdjPDqu0oD5B5T4q9uyeZMNwLChnDh/3SARFh Mg4zoR9o2KdvcM3ddITec1M3N75fdDyKRX29dXHSPiPbighUe5/NbgnuCgCm/MDHL1V0 VjbQ== X-Forwarded-Encrypted: i=1; AJvYcCUBksiNbgZcpEsi9339ENC9fy8ReTMq1LEj416Joh7XS+tLCHcUBIxWtv2Q2z68X3VBru2XboK06sxFeaI=@vger.kernel.org X-Gm-Message-State: AOJu0YycQ+ZTS7rmgM7oTT8WpB+wiUdiEMeJdWHbQIGl/3LdH59N8ges e4ptoucShQvtqkTXTXg+wUeRe/dhstKTi8FAvr/a9dajPq5kC+4La1X6 X-Gm-Gg: AY/fxX4RuWxlHMpzKCQ1f/cghY0+137px8UtoUWt779Na/McDXP89oGnKZ9Ox9/xaeQ bKSBtJ2CsmPpJ07KmTJM8RRmxUq1AtzLE+jcJTOUrpAlb2i24Uu0c5KjU2NfpWlUBXRQaiKoovh KM0Ua89/VEu/gEEugpiAcpLIl9PY5VxdfYbeDDUVuECrJ8X3AQv+tuopu65f0HY3SO5MWz0DvXT f3xeN1vnW4wXnBy0A3Om4PskfCVBBbXyHmUw7Ih9sDB5X6BSBuImDG0vr+G8acqcoYdtYN+EI7t g15htX9Rorva+D8sZRZVIsVZaX2grXaGXW+70rTx+brGNsU5NGScTjFGl08h8cT1PKeunTVA24N qq/DSXC00VFfRkMczCU/cnFGu4WdcW4a15jGbIyA4Eb3y44uJ5y8s5/DtIgY0m4FlyDjlapgtEj O+T+DgjLs= X-Google-Smtp-Source: AGHT+IEttVPCWCvk8Pr0apQez8fgF7tG1sqIw2qS7xEH+hRKidNyasenyD8alWTfRCkhKagcAfR5Cg== X-Received: by 2002:a05:690c:2703:b0:789:61ca:88f6 with SMTP id 00721157ae682-78fb3f02ce1mr844762997b3.4.1767529817694; Sun, 04 Jan 2026 04:30:17 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb4378372sm175449427b3.12.2026.01.04.04.30.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 04:30:17 -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 v6 08/10] selftests/bpf: add testcases for fsession Date: Sun, 4 Jan 2026 20:28:12 +0800 Message-ID: <20260104122814.183732-9-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260104122814.183732-1-dongml2@chinatelecom.cn> References: <20260104122814.183732-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_fsession_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 --- .../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..b180e339c17f --- /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_fsession_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_fsession_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_fsession_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_fsession_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_fsession_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_fsession_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 11:40:29 2026 Received: from mail-yw1-f195.google.com (mail-yw1-f195.google.com [209.85.128.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 82D29155C87 for ; Sun, 4 Jan 2026 12:30:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529833; cv=none; b=RuOyo/N6zyyw00jCkgX6Xr0puvsNFpUS12OiLByAPi3JEuFhrF3xZYoLTmCzNbDDOp8JQNh6FhLBeC47DyHXGfHYgQYZFmUlBuDnwdvABlrhpYf0elb5O+NEPzXD5EL4lHV67shtvg7rc/vwSvt3ArQPNf+rsKmf4LKqfPRFpsg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529833; c=relaxed/simple; bh=UJTrEvbHHc/LCR7ssI7rQ2WfdPkmcvBgvYjr55P9c74=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ogr3/mu1YMk2VmOIgkq8tjfI7izexQp4dHjuqMe6S9Etdj7wVSx1uVmP9Gfs/htPl3OCtsiVaIEaZfLmCcRHgGjapyFHwaaYk98zAlwc3ZiHzzOYb+x2cswD8ZrvFTjfcve1eKxR41oz0/fWjqKOypbDsjsWcCFHJ8YjhNVOleE= 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=Y4XuCL38; arc=none smtp.client-ip=209.85.128.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="Y4XuCL38" Received: by mail-yw1-f195.google.com with SMTP id 00721157ae682-78fc174ada4so83333067b3.2 for ; Sun, 04 Jan 2026 04:30:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767529830; x=1768134630; 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=as3rErWMsms+S9eR1OsrQ4sWO/jfg5iKakL+peUOPUQ=; b=Y4XuCL38pAHICMYZv49URD20XeaQJdqZ8nG7lK1FANUqBA3xCYq2XtNHbIy/X8qdvq WihzWVvp06w18ZRixChG6v6S2zPz9rssXRl/39ZYdt0Hq7eIm/u8zFdsGG1hvzZ3gIL8 NCeubrcleZmmoWZnhkz8AZ0PhYNRHj9ug3F3UDewcTmOiVI4GAQtJGFD2b89A/3X0ZO5 EMBaw81CTPdP0mg+X0bdbZOFGLtE0CiUckRXgs39itl1/bgcSmu3fzwiXIvVjIJVgJOY bLg/5QnkVR9+lClbqkSPY902kio16s3tQTcYxvF897P1Fyj8zBy+eunP6MlgwX+zqeWh 49dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767529830; x=1768134630; 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=as3rErWMsms+S9eR1OsrQ4sWO/jfg5iKakL+peUOPUQ=; b=TfcOLlBtBQjIfTKWpoMqeKwuG/wUNimI9q4DEMgKlKYT/XMk/hPpJzwxpHzwVk037A gna+wzmfKn8SSGmE5vK7Slweyd4G/ERRKMjnUOWSsHyCccovfKPVgNJvsRI3ux20yAkz nSFV5WSLgsMFZvlSaO2aG/X07WGAnCYVCTMAs4VLsDF6JIacE2TyQVofoAOTeolB8BxC M6HxvCHkGAxgkXtFCq2IDrO2XARp9uSy2usjIwR9f+dbrqPlhiDsG74Tc9qhFFRaEiJI gX7+asbN4CWOi9MyMEcAd8A1JE2n6+SwNlJgxConpS51WwlsF0QwZWzKZeT28J2ljOkb jVjg== X-Forwarded-Encrypted: i=1; AJvYcCWTS5YVGcAvKqNdr/xvn3frpe1S2Or3vwUizVadWisGEhDKPrs1i8XkT6UmrRD7A+7T28NM+Xjkpk4ve4s=@vger.kernel.org X-Gm-Message-State: AOJu0YwPfVR0GzfrsRkYu78YwnANMqT9mGwDzLMfwHIN/LdNYmS3lnkJ 1JuaJmpwHsUFjRwOhjgG0wcbQqAaNbX5v93se2E5iE10w1DTsW15b2Pg X-Gm-Gg: AY/fxX6w7wrZ6UGppIRSDYnacBWjgFJudWJgnO09RY9mZ7M0vRMtvpfstwWSIArTlIl uetN23bM6XCf6YVU8DxJTYjKnQLNPkeW5yNxw7lCPx1IdT9ehmJ7P2DEu010R7lPDHAKEXBC8+U BBGoIrw6PeoVuxgWvjbZZIh4ISi8028KICSKjp8Qw7y9sgob604mIbhKkhQfI9vz/D6UTk33FJD ggg8YM855CkgVbyP39DmbMpESdGV7Fum9OM3A6ehRO0ZTszrdCZwratFKtMbUY0HpuCL29/dmCS IP/swST6jn+mqr9/AdKXHht8h2jQMaYq1XCRPL1JWeuoqTtM0XZVgk0i8bhiMrjqX05PFuWCmyO UvYskPDNBJqn9pkC0D+KncPtThuMdmkHXp2qpfFgqzvZEYazveflbmOW0Sq9f9RhDxdc9PpWBkG lq6iVTp6M= X-Google-Smtp-Source: AGHT+IEJ9FbG+KJUSmyqe4GlcGQqpBKjEIjKXafZDNIvaw0YBShwM0FwK00UNy6MiyBtchGBy4NDkA== X-Received: by 2002:a05:690c:23ca:b0:78f:bcc1:88e0 with SMTP id 00721157ae682-78fbcc18f16mr386621047b3.1.1767529830518; Sun, 04 Jan 2026 04:30:30 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb4378372sm175449427b3.12.2026.01.04.04.30.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 04:30:30 -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 v6 09/10] selftests/bpf: add testcases for fsession cookie Date: Sun, 4 Jan 2026 20:28:13 +0800 Message-ID: <20260104122814.183732-10-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260104122814.183732-1-dongml2@chinatelecom.cn> References: <20260104122814.183732-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 --- .../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 b180e339c17f..5630cf3bbd8b 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_fsession_cookie(ctx); + + if (!bpf_fsession_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_fsession_cookie(ctx); + + if (!bpf_fsession_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_fsession_cookie(ctx); + + if (!bpf_fsession_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_fsession_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_fsession_cookie(ctx); + + *cookie =3D 0; + return 0; +} --=20 2.52.0 From nobody Sun Feb 8 11:40:29 2026 Received: from mail-yw1-f193.google.com (mail-yw1-f193.google.com [209.85.128.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 DA5452D7DF6 for ; Sun, 4 Jan 2026 12:30:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529843; cv=none; b=H2Khb3pqsL+dWPgfSiY/WWjI5tZF3xXdGbyhPmmcu2VmKGKSv0Q8zcfBY0vNqS44zug3WE/lvxZKt+Q/Z/DIk3i9B6RC6obUjCwiysKP7BlPqVhMu4AFhM8+3fAanNW1rpbKjKoL2aPFIWaR9xUgHK+ZfoQ+0lANJ1TNelW3WV4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767529843; c=relaxed/simple; bh=ARq0/QucFj/sxPqr+22ybRos7rUcjBBi5nq/Y4PoAvU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dRSsTYYziBjea/h3PYBVb+C8Zv50XyfbSog3dqlZjDm8y+doVvR/jhLl4xThk0JRRNp92e+U/Of45tZL9i9MIoS/Ck8W3gKHmMV5Q4IAWpLy05thodMeBcCOc7FBtpvIu4oy2M/WsbODT0gkVZSE67TaJuOeheeciJhoyU9+fQ8= 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=TqPkms3U; arc=none smtp.client-ip=209.85.128.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="TqPkms3U" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-7908ddad578so1309937b3.1 for ; Sun, 04 Jan 2026 04:30:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767529841; x=1768134641; 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=ki8yj47Ksf2sOkp6JBKCA9cB1ptX2Wx6sb0cvY7RlMA=; b=TqPkms3U+iW3ZtHfZVQjlxgEmv0kdW+TEc691Q1F9AVik7R1CxM07xU7sYmYBVdTut YvJEwRyigQ5XFg1f7RzDNSD3bh2JcV7WL/9BJ3LTQ0zYR6Vdk0j9pO8dneLnayedCXqc LEUM1gufSqq0uuveuXnxoag76AtvwEJ7x19FKID0Ls60Op0pCUIAQzJlHRBrGt/AkY8p e4Ct6NtYXCI14AdCF8c0n5JEOY6cIEWXviAQ9nfuSF+p7cY0AKDL+2Vh8fUPuJ9uZs7W vK4ovstoqjMQOr/l+xVySfCshB9DkSnht4D9YXD0x1xwbiNUOgBfzP+kpl+N1TlUZe5D ltpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767529841; x=1768134641; 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=ki8yj47Ksf2sOkp6JBKCA9cB1ptX2Wx6sb0cvY7RlMA=; b=kcbeKO/qCHd6J1+TopkTq5QIPgTk10TAdF/kxikZdANawW/Uvm83wvXc6tsvwEuDtV 34w5/NmI/V7+1hWfs115LB1TOGRXvqdcvjCftusYabTTt4O/t2V0ZYLp0tQuco98skNk VOfjZ3fR65T+oLZYJpSbIzEQuU8pmYTkKDc9z9sIM6Y3ZAj2p7BqZ83DMnwsirXPS13d ZEgh06W55KiwyKxMu0rJYk7M470DJ2foQyMBr5KktbfleZwFtC8qsbKgEyUxrDU3+OQT CoVONt6BgTr355zqTTLVFfKtVtSvCyX+wWcr2dyW/JZSHIwE3uThu9CEisEPoMJmvnvg EYKg== X-Forwarded-Encrypted: i=1; AJvYcCUcLFiyIMcdZ7F/gJOF/gBxrqW6DA2o1hvtg+aEGGAB2wNMGOFhb/4i9CYuFIARDnjVnalq4R0rqz0ARhw=@vger.kernel.org X-Gm-Message-State: AOJu0YwMIGv8FyQNB+Rn5fOr64JxYXkuN15TdM+67pAFLjkgA7uXVLxI /eFhdtNX4aOXkzWJtBwyYdFPD/09s0GPIcn/fXOvUDumIy3Lhpd7ycQV X-Gm-Gg: AY/fxX6mVlbmMKSSZZwn9rQ4HRZ8a2winGnV7qmiionUlmruRb/iPcg+pxnu8GtHmtV PxfbJBe33Wb4JaDI38QtelHdhtPm1WIo01OofzXz160gXzBvsFQ5I2guKU35Iba+y7GhNHo6ZtN z3w9LWJbCD7PpSjXsAxLW0ofyNemLaW7bH87duzW/BQgj79j1m2K4M+poVzd4A/Gr6bRfHAFfYi Ceu2orb2fKnxv9aLHx98ruzv0Zd9WKzDvW1c7z+lWCW5+65h0BLK9yvkgT4e8xNFbgL8pynLO7N isjG66ZOayc0umh/vuLhp/ryICnNSKjIuQq3heOyW+mjjbw0HXTtL3yj7hqhFoLyoEVG4JHRgMb FuJSN/Qg96UWUYMtnF1+ZJsVZlCdhpR5L6yrw4IL7l6s5gaDjXCRaZ03LalLdQiRIRAex/iA2Gn S1HHxExc0= X-Google-Smtp-Source: AGHT+IHvmhNvokdhiDeZCaYjQcCM0epcPEZFOjtq+9XoutL8WlCTfktxFdlZD6VAvB+jQfPzwTGVbQ== X-Received: by 2002:a53:acdc:0:10b0:644:79fb:7db7 with SMTP id 956f58d0204a3-6466a87f95emr31497735d50.13.1767529840792; Sun, 04 Jan 2026 04:30:40 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-78fb4378372sm175449427b3.12.2026.01.04.04.30.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Jan 2026 04:30:40 -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 v6 10/10] selftests/bpf: test fsession mixed with fentry and fexit Date: Sun, 4 Jan 2026 20:28:14 +0800 Message-ID: <20260104122814.183732-11-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260104122814.183732-1-dongml2@chinatelecom.cn> References: <20260104122814.183732-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 5630cf3bbd8b..acf76e20284b 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