From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.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 3A3B2142E83 for ; Sat, 24 Jan 2026 03:31:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225503; cv=none; b=CcecqxDCt/AGeMlR3Wy/XObaUUSS/TTw/DPI3zBrtHo2Qherfv5QdrZ9Mty1s8+HvwG4JlW5YHirkyUVlBMe6gkBFcZasaozHR9VwFr9ub5xDKNxqP/R4Iy/ExfxCOyKxVTCPeYuT8zEq2Bqz/pIjbJgBfF5uPL2TOne7kPHUd0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225503; c=relaxed/simple; bh=wwBM4KNzRljNZStnUWhG7h/qOqs25RK0YzU3W4PEVTo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WMbNm2QTuAXH1yXmdDp8E935tmD4nYsyu0iOsMduTT50nvEmPm0L2mCRtk0qF3CEl5gZ38J4lLjb/dlqFvXFECyi0qj2zTrClddEsW2/Yd3zD/wlfc4/1RQx3vSQOisA8kvMi9Ox6wGhkC7x7K26gubgCaY4JmT3kUdneWjeO8o= 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=gEXHnYd9; arc=none smtp.client-ip=209.85.214.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="gEXHnYd9" Received: by mail-pl1-f194.google.com with SMTP id d9443c01a7336-29efd139227so20459965ad.1 for ; Fri, 23 Jan 2026 19:31:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225501; x=1769830301; 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=AaONV4URFGPh7x7Ej+eVXTWdZoGaQBVfVQGzpGIPLXA=; b=gEXHnYd9m3/49I/P1H9fNS/M71RSxGX4QO7ihTofhAlRvmX904WOiHZHE1RP9tFalY gDBKze6vTx3VeeRiFkxt9ukbX7MJRHI052aH6IC/NHeK8Rcwk24Ba29MckkJt/7ijjhx 0HnM6DwAyUvJ9R+FZwGUe9rYKkMnRAsj0DscC1yRuRgVIcABtc6w6ZCSC40aQKH7iah9 pezd3ZO6qauVNZoV21CkpLrGMYN7T2GDZMIz9wtWvs17Y23NSh+25BGXKNJUJXCUaMXs UhG+nfiLVNd+3B6o6G+mpuJRFaSiRgQrCG6Fur7fy74Ja5nsSxHHa9LdYZ1nKKouWRCn ZgwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225501; x=1769830301; 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=AaONV4URFGPh7x7Ej+eVXTWdZoGaQBVfVQGzpGIPLXA=; b=MP33IS7mqXZOYB2fWjDU4Up4PzLPdPKzhjqrF/5FqOppR0Hq7nP+8tV+lJgAK4Dgbg m2H/oLl69XQxFCcA5a0W1bwbSuGizD8JLyVYUX2aa5MHg2F1T9Hs2WufmIG06kG5iuMp tPrDTJ+x29pXKbwgr/mFIBVDMpgzsZjpE8eCqlDzzgAVa4BuzCjDd/BEL4jMvANjOWwp K01JKUa/P95pSEe20msBBNcm/rXdqziRsaKYGVjLyis64bem0jAx5BLq6wFDFiw23MUt rh2txSRkgrPRwlhBokLoYODYeHJtD95o2iKpVx3CjcKd5mYpILlLoHGManfazt8D0Oqu xwwQ== X-Forwarded-Encrypted: i=1; AJvYcCU1orgaxJOKkoFPo8MChPyQe57+d8eJmXIK6TaA7JdTLBS8jJYgAryrtnnoR6dLevjd51IlPfl+Ljp/RYU=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/+z+ltHjOoBr6Vb222iPi+z2Z8HVb6usV+l3jsDu+OHWRZrtm HyinuFw5HpOpNoRTf3hUDCJzEUpADrhrQ7aWYzjb77MK1lGZytsYLyxo X-Gm-Gg: AZuq6aJJcN77AUofhqqO0nNzeGsNWgia0tpHWjIF6jnLCBFrC7+UiG2Mtr+jqRsHXyp s1Zt/vgwgnccvCbDqruSW+K7b0mQlbBpJv8f//WFQjBpjt/mqr+6+qss6JBW57MSZ2caKH9nAl4 jjJxJarA1w5gN8tbAorgTq2GZYYty2RL94sz45PoeBpJZZzEc2BRxmAmc7zgBNdL6M9S+gHzBKQ jwu4TiHboRrFuyxEbJJIiwEptK3wvgd6NSr9ci7Ri5Zszi06lS+3KON0ivnGyhu5+Xsw9rz7JTO FgtaA1KZSKKthIzuaBc4fLtxObae8t60A0ksiOdoleO/CIu1uOTl5YEEADbip7nkKHOWtUZtHui tzY15DZhO85NouRnKh+GxcXOcOCd6qb+SljAOj9Umr9bY7SVi4mD4Nawe3c9l8JGlOXye9q3qlK 0yfeyFUv0i X-Received: by 2002:a17:902:e851:b0:2a7:9163:8e68 with SMTP id d9443c01a7336-2a7fe43edcemr52256935ad.6.1769225501413; Fri, 23 Jan 2026 19:31:41 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.31.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:31:41 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 01/13] bpf: add fsession support Date: Sat, 24 Jan 2026 11:31:07 +0800 Message-ID: <20260124033119.28682-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-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 --- v10: - use switch in bpf_prog_has_trampoline() - some nits adjustment v5: - unify the name to "fsession" - use more explicit way in __bpf_trampoline_link_prog() v4: - instead of adding a new hlist to progs_hlist in trampoline, add the bpf program to both the fentry hlist and the fexit hlist. --- include/linux/bpf.h | 19 +++++++ include/uapi/linux/bpf.h | 1 + kernel/bpf/btf.c | 2 + kernel/bpf/syscall.c | 18 ++++++- kernel/bpf/trampoline.c | 53 ++++++++++++++++--- 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, 97 insertions(+), 13 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 5936f8e2996f..41228b0add52 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1309,6 +1309,7 @@ enum bpf_tramp_prog_type { BPF_TRAMP_MODIFY_RETURN, BPF_TRAMP_MAX, BPF_TRAMP_REPLACE, /* more than MAX */ + BPF_TRAMP_FSESSION, }; =20 struct bpf_tramp_image { @@ -1875,6 +1876,11 @@ struct bpf_tracing_link { struct bpf_prog *tgt_prog; }; =20 +struct bpf_fsession_link { + struct bpf_tracing_link link; + struct bpf_tramp_link fexit; +}; + struct bpf_raw_tp_link { struct bpf_link link; struct bpf_raw_event_map *btp; @@ -2169,6 +2175,19 @@ static inline void bpf_struct_ops_desc_release(struc= t bpf_struct_ops_desc *st_op =20 #endif =20 +static inline int bpf_fsession_cnt(struct bpf_tramp_links *links) +{ + struct bpf_tramp_links fentries =3D links[BPF_TRAMP_FENTRY]; + int cnt =3D 0; + + for (int i =3D 0; i < links[BPF_TRAMP_FENTRY].nr_links; i++) { + if (fentries.links[i]->link.prog->expected_attach_type =3D=3D BPF_TRACE_= FSESSION) + cnt++; + } + + return cnt; +} + int bpf_prog_ctx_arg_info_init(struct bpf_prog *prog, const struct bpf_ctx_arg_aux *info, u32 cnt); =20 diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 2a2ade4be60f..44e7dbc278e3 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index d10b3404260f..8959f3bc1e92 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -6219,6 +6219,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; @@ -6820,6 +6821,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 3c5c03d43f5f..b9184545c3fd 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -3577,6 +3577,7 @@ static int bpf_tracing_prog_attach(struct bpf_prog *p= rog, case BPF_PROG_TYPE_TRACING: if (prog->expected_attach_type !=3D BPF_TRACE_FENTRY && prog->expected_attach_type !=3D BPF_TRACE_FEXIT && + prog->expected_attach_type !=3D BPF_TRACE_FSESSION && prog->expected_attach_type !=3D BPF_MODIFY_RETURN) { err =3D -EINVAL; goto out_put_prog; @@ -3626,7 +3627,21 @@ static int bpf_tracing_prog_attach(struct bpf_prog *= prog, key =3D bpf_trampoline_compute_key(tgt_prog, NULL, btf_id); } =20 - link =3D kzalloc(sizeof(*link), GFP_USER); + if (prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + struct bpf_fsession_link *fslink; + + fslink =3D kzalloc(sizeof(*fslink), GFP_USER); + if (fslink) { + bpf_link_init(&fslink->fexit.link, BPF_LINK_TYPE_TRACING, + &bpf_tracing_link_lops, prog, attach_type); + fslink->fexit.cookie =3D bpf_cookie; + link =3D &fslink->link; + } else { + link =3D NULL; + } + } else { + link =3D kzalloc(sizeof(*link), GFP_USER); + } if (!link) { err =3D -ENOMEM; goto out_put_prog; @@ -4350,6 +4365,7 @@ attach_type_to_prog_type(enum bpf_attach_type attach_= type) case BPF_TRACE_RAW_TP: case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: case BPF_MODIFY_RETURN: return BPF_PROG_TYPE_TRACING; case BPF_LSM_MAC: diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c index 2a125d063e62..edf9da43762d 100644 --- a/kernel/bpf/trampoline.c +++ b/kernel/bpf/trampoline.c @@ -109,10 +109,17 @@ bool bpf_prog_has_trampoline(const struct bpf_prog *p= rog) enum bpf_attach_type eatype =3D prog->expected_attach_type; enum bpf_prog_type ptype =3D prog->type; =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)) || - (ptype =3D=3D BPF_PROG_TYPE_LSM && eatype =3D=3D BPF_LSM_MAC); + switch (ptype) { + case BPF_PROG_TYPE_TRACING: + if (eatype =3D=3D BPF_TRACE_FENTRY || eatype =3D=3D BPF_TRACE_FEXIT || + eatype =3D=3D BPF_MODIFY_RETURN || eatype =3D=3D BPF_TRACE_FSESSION) + return true; + return false; + case BPF_PROG_TYPE_LSM: + return eatype =3D=3D BPF_LSM_MAC; + default: + return false; + } } =20 void bpf_image_ksym_init(void *data, unsigned int size, struct bpf_ksym *k= sym) @@ -559,6 +566,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 @@ -594,8 +603,10 @@ static int __bpf_trampoline_link_prog(struct bpf_tramp= _link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog) { + struct bpf_fsession_link *fslink =3D NULL; enum bpf_tramp_prog_type kind; struct bpf_tramp_link *link_exiting; + struct hlist_head *prog_list; int err =3D 0; int cnt =3D 0, i; =20 @@ -621,24 +632,43 @@ 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_FE= XIT]); + 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; } @@ -672,6 +702,13 @@ 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) { + struct bpf_fsession_link *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 c7f5234d5fd2..41bbed6418b5 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -17848,6 +17848,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: @@ -23774,6 +23775,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); @@ -24725,7 +24727,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 @@ -24740,7 +24743,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 { @@ -24824,6 +24827,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); @@ -24990,6 +24994,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; @@ -25071,9 +25076,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 26cfcfdc45eb..178c4738e63b 100644 --- a/net/bpf/test_run.c +++ b/net/bpf/test_run.c @@ -685,6 +685,7 @@ int bpf_prog_test_run_tracing(struct bpf_prog *prog, switch (prog->expected_attach_type) { case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: if (bpf_fentry_test1(1) !=3D 2 || bpf_fentry_test2(2, 3) !=3D 5 || bpf_fentry_test3(4, 5, 6) !=3D 15 || diff --git a/net/core/bpf_sk_storage.c b/net/core/bpf_sk_storage.c index 850dd736ccd1..de111818f3a0 100644 --- a/net/core/bpf_sk_storage.c +++ b/net/core/bpf_sk_storage.c @@ -365,6 +365,7 @@ static bool bpf_sk_storage_tracing_allowed(const struct= bpf_prog *prog) return true; case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: return !!strncmp(prog->aux->attach_func_name, "bpf_sk_storage", strlen("bpf_sk_storage")); default: diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index b816bc53d2e1..3ca7d76e05f0 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/tools/testing/selftests/bpf/prog_tests/tracing_failure.c b/too= ls/testing/selftests/bpf/prog_tests/tracing_failure.c index 10e231965589..f9f9e1cb87bf 100644 --- a/tools/testing/selftests/bpf/prog_tests/tracing_failure.c +++ b/tools/testing/selftests/bpf/prog_tests/tracing_failure.c @@ -73,7 +73,7 @@ static void test_tracing_deny(void) static void test_fexit_noreturns(void) { test_tracing_fail_prog("fexit_noreturns", - "Attaching fexit/fmod_ret to __noreturn function 'do_exit' is re= jected."); + "Attaching fexit/fsession/fmod_ret to __noreturn function 'do_ex= it' is rejected."); } =20 void test_tracing_failure(void) --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.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 EC7FC142E83 for ; Sat, 24 Jan 2026 03:31:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225512; cv=none; b=SYGcJ82Vrf58LNNql4oBDkC6v86cWHyZSmZuUwNaHwQEQNHBdkOb3VMVgQj6i0yNOlr+cAWF8xisfbl9yT4UV8y/MHWAsmg5nPJlPAsVTEG9Up94TaQXCfL6w8EbAMhV6xbuQUsdwtm256CNxqgjkSAEU/+nRleFUOcidaN0aiU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225512; c=relaxed/simple; bh=ov0wUqV6kuTWTFBkzZscv2aYec7op/sl0bS8tbqxj1s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BcsiQFE7REYIrm+dva7Gau1nm80U9dCtkp9uzJ0tO778rEB1xhRKn2IgaWQln8Z2SSnjo0z7zz8y1kkgOgAaSuMxdY/IsewB+tzSbVkWe5af9oE7EK16DtA1dK8r917MnlbiNWQdvOQQZuGpaY/s/99IGPNDIVfkYLZh4roP5J0= 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=GBXG9QMG; arc=none smtp.client-ip=209.85.214.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="GBXG9QMG" Received: by mail-pl1-f193.google.com with SMTP id d9443c01a7336-2a0c09bb78cso20139855ad.0 for ; Fri, 23 Jan 2026 19:31:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225510; x=1769830310; 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=0MyGznuXGAu60e1tz5lHjO5zn/zhV1nMJNWbpCAy+Ik=; b=GBXG9QMGhVsF7DpzxaLxURSje+hnx5S+fHSqdDcm28PxROnbj6XzRnDMdXFXjdb+zZ KVa/4UsbbDbMpxnKtuz0s26YFDMTywEC2s+zYvkavE0GbxAWjjqfkUI6UmTXLcFj/XZA TQnUfhH8i7Es3f8yDF9nNlIDNJkdaMy+zGm+1ZcHvLuW7ND18qRipymeE61BBdCE408s ZAXF9P5OYtGr4x7vs5Fff/BQsRP5bot3hdUbXNASorQLIQD1BEVjbVlp9VDTM93inTb1 i0GNo4GfEy+ZsfPSZHqEY8+z0Cvm9PcEQvnkNDWJZsoSJpH37nGxykQUH24huGs4dZg0 pKbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225510; x=1769830310; 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=0MyGznuXGAu60e1tz5lHjO5zn/zhV1nMJNWbpCAy+Ik=; b=Uyh3kpLvo/z7fXbmJ7Lzh49Zbk3C4V8zxhBKtkwUDT3mHdYVkKZPXU7oK5lGmlOj1L d4qBhsEk/yJ9FmNlABtiiF8KSFI7CbL03X+CuTthADa6cXQUOoiG93yklg01ntF1QtGQ W4DcBpCm+pF/auWktVq2EY30hEN/kADWGyKUyTqz7Pv69ZxHUBe/9v+0F7v3eLR6UEnh OGol3pbd14i3PLhXlxp1byqrRFdj/B4V/wm8SLmg2K0FoPLQEgmqthcYoU4RQi34z+9+ SQO3PCi/2ahe1keWUoE/lFJg+V+54iqqouAh+cwiL3C7geGHT6WaVgU2TfVuSDIUZicw C1hw== X-Forwarded-Encrypted: i=1; AJvYcCW7BmAZ6IKLicTReX9YZhEElk85A9M3qZyoR5e/wzwGC4yzKIIgakLoh/Q/RSWmPX3dLKAn8Pomy6B5jV8=@vger.kernel.org X-Gm-Message-State: AOJu0YwsirsHRrewLrdXv1VzkCRd5TjoeHo1WS89CEF6cdqZmacOfTKl bLsPzX27gJAQFB8haZlQiTMuvZPIyVbhXvZ3Wee9qkG53T26B9YT1Ibp X-Gm-Gg: AZuq6aLWLUPakDxnYjF7ynB1WnUsh6BaZNzfXEenu6j1FBaNViN147NsboNHmMI/jmJ rG7XZ3y7EZZGJ/T0SHzHQofmeDsP1Du6bHZ6doZ/ipTjpzFxUR1pwSX1i296Jto8F6cTI08WyDw O6aEuFXuO0o0k/q9b+q0MlCg3aNjr6oVz2dEk7l14q+zJHr43tiM9CEFmBgu1kU62LUJOxJSRk5 Ten0t0AlLbVSxT23K2FEsg2hqZ93pvR3qlE/2+UK+JXeeWl31kT0YUNPnFdDdlaZRNqBb2GXhxX 2lIzrGl0Z9XPYHrnASIMG1KYJxrE8CHgSYJeWJZ0m97HYTFe1ZOFissfaKqiy8Eoq7F1LXgjDFl jwDOCC3CXna+VmEMCKUbgvJVavKySMej783EVRQYeBcVIgrvCRZO62PMR0q2U9KzUGxIPylQ2IJ 3/THAUZeAP X-Received: by 2002:a17:903:2442:b0:2a0:f0e5:74eb with SMTP id d9443c01a7336-2a7fe835facmr43215035ad.28.1769225510260; Fri, 23 Jan 2026 19:31:50 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.31.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:31:49 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 02/13] bpf: use the least significant byte for the nr_args in trampoline Date: Sat, 24 Jan 2026 11:31:08 +0800 Message-ID: <20260124033119.28682-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-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, ((u64 *)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 least significant byte of ((u64 *)ctx)[-1] to store the nr_args, and reserve the rest for other usages. Signed-off-by: Menglong Dong --- v12: - compute the "delta" for the BPF_FUNC_get_func_arg_cnt case v11: - fix the rebase conflict v10: - some adjustment to the subject and commit log to make the description more precise. v8: - fix the missed get_func_arg_cnt --- kernel/bpf/verifier.c | 39 +++++++++++++++++++++++---------------- kernel/trace/bpf_trace.c | 6 +++--- 2 files changed, 26 insertions(+), 19 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 41bbed6418b5..2081343a848d 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -23747,19 +23747,21 @@ static int do_misc_fixups(struct bpf_verifier_env= *env) =20 /* skip 'void *__data' in btf_trace_##name() and save to reg0 */ insn_buf[0] =3D BPF_MOV64_IMM(BPF_REG_0, nr_args - 1); + cnt =3D 1; } else { /* 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); + cnt =3D 2; } - 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[cnt++] =3D BPF_JMP32_REG(BPF_JGE, BPF_REG_2, BPF_REG_0, 6); + insn_buf[cnt++] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 3); + insn_buf[cnt++] =3D BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_1); + insn_buf[cnt++] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_2, 0); + insn_buf[cnt++] =3D BPF_STX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, 0); + insn_buf[cnt++] =3D BPF_MOV64_IMM(BPF_REG_0, 0); + insn_buf[cnt++] =3D BPF_JMP_A(1); + insn_buf[cnt++] =3D BPF_MOV64_IMM(BPF_REG_0, -EINVAL); =20 new_prog =3D bpf_patch_insn_data(env, i + delta, insn_buf, cnt); if (!new_prog) @@ -23779,12 +23781,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; @@ -23808,15 +23811,19 @@ static int do_misc_fixups(struct bpf_verifier_env= *env) =20 /* skip 'void *__data' in btf_trace_##name() and save to reg0 */ insn_buf[0] =3D BPF_MOV64_IMM(BPF_REG_0, nr_args - 1); + cnt =3D 1; } else { /* 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); + cnt =3D 2; } =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, cnt); if (!new_prog) return -ENOMEM; =20 + delta +=3D cnt - 1; env->prog =3D prog =3D new_prog; insn =3D new_prog->insnsi + i + delta; goto next_insn; diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 0e9635bcd783..d466a1503da3 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -1194,7 +1194,7 @@ const struct bpf_func_proto bpf_get_branch_snapshot_p= roto =3D { BPF_CALL_3(get_func_arg, void *, ctx, u32, n, u64 *, value) { /* This helper call is inlined by verifier. */ - u64 nr_args =3D ((u64 *)ctx)[-1]; + u64 nr_args =3D ((u64 *)ctx)[-1] & 0xFF; =20 if ((u64) n >=3D nr_args) return -EINVAL; @@ -1214,7 +1214,7 @@ static const struct bpf_func_proto bpf_get_func_arg_p= roto =3D { BPF_CALL_2(get_func_ret, void *, ctx, u64 *, value) { /* This helper call is inlined by verifier. */ - u64 nr_args =3D ((u64 *)ctx)[-1]; + u64 nr_args =3D ((u64 *)ctx)[-1] & 0xFF; =20 *value =3D ((u64 *)ctx)[nr_args]; return 0; @@ -1231,7 +1231,7 @@ static const struct bpf_func_proto bpf_get_func_ret_p= roto =3D { BPF_CALL_1(get_func_arg_cnt, void *, ctx) { /* This helper call is inlined by verifier. */ - return ((u64 *)ctx)[-1]; + return ((u64 *)ctx)[-1] & 0xFF; } =20 static const struct bpf_func_proto bpf_get_func_arg_cnt_proto =3D { --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.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 CB415142E83 for ; Sat, 24 Jan 2026 03:31:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225521; cv=none; b=C/rotCtMYWea/ChakLORrl762Bb8aL51mGJTdqCplXJaV9tIY58sVtaJmHqHvOeHXWuIt5Y/QSEk3cu2fswYpRdXWiqAhtJclto4BTaL4rRcn812TMvzKAxRiwsX6IBgDW9ceRyYh2QvM4FUKHrZi95iqKf4sF6lsMl21hQLhNM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225521; c=relaxed/simple; bh=D1aO+oqWTqVbI7neF6MggHiTAyqchYMiNo/15B60NDM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=A1JK9hD9IzwstWt4h5RFAAYn2t3PI/to1T4Bidk2VYlA6Z/EORcBGqVJaiE9BmT6E1RlSg6fNfZcwFW1yn3oe2kCcKu6u2hFe7NRig2Y3NzkYFdXUpUxT3GFbvarVMEnn8pg3eYefCOxU1iz+rjtywJpHSPphCQVeD0uU+qbqlE= 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=YJpoDgY/; arc=none smtp.client-ip=209.85.215.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="YJpoDgY/" Received: by mail-pg1-f196.google.com with SMTP id 41be03b00d2f7-c636487ccaeso350432a12.1 for ; Fri, 23 Jan 2026 19:31:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225519; x=1769830319; 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=bPw7fdOWCFlcs/hrYLDN1KcscquTuLr5di1FEI+zxGg=; b=YJpoDgY/Z88InrWYrLWl1fKzuDji49Mf7TcJxi35EqYyHKIVfVY4Pr0iMVUGP3+rSI e0ILnKc56hfJ1BHqutx0W1H/CHIxo/rkoATYllD/L7G/PG76V9rCQ7+141J1/Ynhqd9s oU1uoKvpOSz6O0SI2apMBdTnQOwO1x7b4UXSuvxOPwog0HOk138MCXlc7Xa/w6h9Egs9 iuqOkFUwGTN/hL3aMPeVFRkENo3iNoFVBqGHisiMhBqA1VScpEjibEkHLUyrCfodLNMB 5t/Z6IG0YCprgBxhwAk1gCwu11WKFd/LQ0LHXobK71LEWVg1CiFc1Lmg04DukXujC+TU WuBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225519; x=1769830319; 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=bPw7fdOWCFlcs/hrYLDN1KcscquTuLr5di1FEI+zxGg=; b=uUXjMs6nFs77EsiDukc6j+J3rSR/k5l7lEFFVlB/S78hmsZIlZvxgi5qxFuVKZ14Sf 7ZVeDkPelOYDUmUgwl023h1ykrNeJ+0nrpmQ7oDTa9Qjfbxb6m9z9zehlE12vrfgvdm7 yNSJQpaIyAaZ2UV1jiUc90qY5TAFW9Ob2XRYOJC/xvBi/EVaCeFfDTXhR/7uhTsTEGnm t9Z1C3MUli2ffVxzdPbztEoTOYJaig7R1Enas4L60LuY5LBx+a8ogCOlpoXoZ7o8Ss5y fwNCaY/1XjiJgtOd3SSSYO+/YUuL5RcxtOnQZRiEe18T799aF32ifonYg7tYCyOglruD WSWg== X-Forwarded-Encrypted: i=1; AJvYcCWmd6aRkLgn370k5DXXysTGloFzCwxnUw6ELmwzXXbjxGVTbivd9u4RYgH1kmMsCLYqT9xWlmwJ/rOLjOI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7Vgkvrg82bd6JFyf7qP5ppYtijYt/a04e+bK5+P1uVLoTLGx+ ZZuIJUAJZ/XmIytOvo2IlFmB+v3fpObU+kxDtH1QCn/yYSWfcfJM0uU1 X-Gm-Gg: AZuq6aKQYakQILLILnSbKHpKsohhnH13ZkmqsQzrsQ8TeuUK1tJqtFEWEcKMoQAKBMF wBaTWv2ftTkrPChPzxKMoh753ne/3k5dhcIIwmtrYWXtO8qCffjqErx9YOSiPENZ3tkUAjevcgS zAJX1J2iHmOcwi4yS0YzAFrpKliwovW/Y0spX10w2Ja1yMFIkUevTZWfaHCXwPy8g9dEoJ+m3uI 0+P3whwhwn+tRnNMa/lWcDBNjQ73Lu6HByBUEn84aIChshFOmTAtJtM3cIgEra5odQvJCwyTOGh iHz9Xxx4IqPIIsGAq1dfZp/rLPKxiUM1je/ivDc1fgYj+jOzwp8g7AnLtYCJ+qHPzEbp0e4gW3r CupTuIXlkMb4gUMKjjM/8hDcgMSqB4ONcj1bmP8m+iNP1ErOF94x6f3lea5dd6WFMhBvgWUV0Us fOpy/TVtQV X-Received: by 2002:a17:902:f647:b0:2a7:63e4:b1ac with SMTP id d9443c01a7336-2a80ec5388dmr28034185ad.38.1769225518970; Fri, 23 Jan 2026 19:31:58 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.31.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:31:58 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 03/13] bpf: change prototype of bpf_session_{cookie,is_return} Date: Sat, 24 Jan 2026 11:31:09 +0800 Message-ID: <20260124033119.28682-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add the function argument of "void *ctx" to bpf_session_cookie() and bpf_session_is_return(), which is a preparation of the next patch. The two kfunc is seldom used now, so it will not introduce much effect to change their function prototype. Signed-off-by: Menglong Dong Acked-by: Andrii Nakryiko --- v10: - drop the declaration of bpf_session_is_return() and bpf_session_cookie() --- kernel/bpf/verifier.c | 6 +++++- kernel/trace/bpf_trace.c | 4 ++-- tools/testing/selftests/bpf/bpf_kfuncs.h | 3 --- .../bpf/progs/kprobe_multi_session_cookie.c | 15 +++++++-------- .../selftests/bpf/progs/uprobe_multi_session.c | 7 +++---- .../bpf/progs/uprobe_multi_session_cookie.c | 15 +++++++-------- .../bpf/progs/uprobe_multi_session_recursive.c | 11 +++++------ 7 files changed, 29 insertions(+), 32 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 2081343a848d..0fa73d56cb8b 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -12484,6 +12484,7 @@ enum special_kfunc_type { KF_bpf_arena_alloc_pages, KF_bpf_arena_free_pages, KF_bpf_arena_reserve_pages, + KF_bpf_session_is_return, }; =20 BTF_ID_LIST(special_kfunc_list) @@ -12561,6 +12562,7 @@ BTF_ID(func, bpf_task_work_schedule_resume) BTF_ID(func, bpf_arena_alloc_pages) BTF_ID(func, bpf_arena_free_pages) BTF_ID(func, bpf_arena_reserve_pages) +BTF_ID(func, bpf_session_is_return) =20 static bool is_task_work_add_kfunc(u32 func_id) { @@ -12615,7 +12617,9 @@ get_kfunc_ptr_arg_type(struct bpf_verifier_env *env, struct bpf_reg_state *reg =3D ®s[regno]; bool arg_mem_size =3D false; =20 - if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx]) + if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_return] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]) return KF_ARG_PTR_TO_CTX; =20 if (argno + 1 < nargs && diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index d466a1503da3..13f0a2de33b7 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -3323,7 +3323,7 @@ static u64 bpf_uprobe_multi_entry_ip(struct bpf_run_c= tx *ctx) =20 __bpf_kfunc_start_defs(); =20 -__bpf_kfunc bool bpf_session_is_return(void) +__bpf_kfunc bool bpf_session_is_return(void *ctx) { struct bpf_session_run_ctx *session_ctx; =20 @@ -3331,7 +3331,7 @@ __bpf_kfunc bool bpf_session_is_return(void) return session_ctx->is_return; } =20 -__bpf_kfunc __u64 *bpf_session_cookie(void) +__bpf_kfunc __u64 *bpf_session_cookie(void *ctx) { struct bpf_session_run_ctx *session_ctx; =20 diff --git a/tools/testing/selftests/bpf/bpf_kfuncs.h b/tools/testing/selft= ests/bpf/bpf_kfuncs.h index e0189254bb6e..7dad01439391 100644 --- a/tools/testing/selftests/bpf/bpf_kfuncs.h +++ b/tools/testing/selftests/bpf/bpf_kfuncs.h @@ -79,9 +79,6 @@ extern int bpf_verify_pkcs7_signature(struct bpf_dynptr *= data_ptr, struct bpf_dynptr *sig_ptr, struct bpf_key *trusted_keyring) __ksym; =20 -extern bool bpf_session_is_return(void) __ksym __weak; -extern __u64 *bpf_session_cookie(void) __ksym __weak; - struct dentry; /* Description * Returns xattr of a dentry diff --git a/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.= c b/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c index 0835b5edf685..ad627016e3e5 100644 --- a/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c +++ b/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c @@ -1,9 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 -#include +#include #include #include #include -#include "bpf_kfuncs.h" =20 char _license[] SEC("license") =3D "GPL"; =20 @@ -23,16 +22,16 @@ int BPF_PROG(trigger) return 0; } =20 -static int check_cookie(__u64 val, __u64 *result) +static int check_cookie(struct pt_regs *ctx, __u64 val, __u64 *result) { __u64 *cookie; =20 if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - cookie =3D bpf_session_cookie(); + cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) + if (bpf_session_is_return(ctx)) *result =3D *cookie =3D=3D val ? val : 0; else *cookie =3D val; @@ -42,17 +41,17 @@ static int check_cookie(__u64 val, __u64 *result) SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_1(struct pt_regs *ctx) { - return check_cookie(1, &test_kprobe_1_result); + return check_cookie(ctx, 1, &test_kprobe_1_result); } =20 SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_2(struct pt_regs *ctx) { - return check_cookie(2, &test_kprobe_2_result); + return check_cookie(ctx, 2, &test_kprobe_2_result); } =20 SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_3(struct pt_regs *ctx) { - return check_cookie(3, &test_kprobe_3_result); + return check_cookie(ctx, 3, &test_kprobe_3_result); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session.c b/too= ls/testing/selftests/bpf/progs/uprobe_multi_session.c index 30bff90b68dc..6e46bb00ff58 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session.c @@ -1,9 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 -#include +#include #include #include #include -#include "bpf_kfuncs.h" #include "bpf_misc.h" =20 char _license[] SEC("license") =3D "GPL"; @@ -51,7 +50,7 @@ static int uprobe_multi_check(void *ctx, bool is_return) SEC("uprobe.session//proc/self/exe:uprobe_multi_func_*") int uprobe(struct pt_regs *ctx) { - return uprobe_multi_check(ctx, bpf_session_is_return()); + return uprobe_multi_check(ctx, bpf_session_is_return(ctx)); } =20 static __always_inline bool verify_sleepable_user_copy(void) @@ -67,5 +66,5 @@ int uprobe_sleepable(struct pt_regs *ctx) { if (verify_sleepable_user_copy()) uprobe_multi_sleep_result++; - return uprobe_multi_check(ctx, bpf_session_is_return()); + return uprobe_multi_check(ctx, bpf_session_is_return(ctx)); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.= c b/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c index 5befdf944dc6..b5db196614a9 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c @@ -1,9 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 -#include +#include #include #include #include -#include "bpf_kfuncs.h" =20 char _license[] SEC("license") =3D "GPL"; =20 @@ -13,16 +12,16 @@ __u64 test_uprobe_1_result =3D 0; __u64 test_uprobe_2_result =3D 0; __u64 test_uprobe_3_result =3D 0; =20 -static int check_cookie(__u64 val, __u64 *result) +static int check_cookie(struct pt_regs *ctx, __u64 val, __u64 *result) { __u64 *cookie; =20 if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - cookie =3D bpf_session_cookie(); + cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) + if (bpf_session_is_return(ctx)) *result =3D *cookie =3D=3D val ? val : 0; else *cookie =3D val; @@ -32,17 +31,17 @@ static int check_cookie(__u64 val, __u64 *result) SEC("uprobe.session//proc/self/exe:uprobe_multi_func_1") int uprobe_1(struct pt_regs *ctx) { - return check_cookie(1, &test_uprobe_1_result); + return check_cookie(ctx, 1, &test_uprobe_1_result); } =20 SEC("uprobe.session//proc/self/exe:uprobe_multi_func_2") int uprobe_2(struct pt_regs *ctx) { - return check_cookie(2, &test_uprobe_2_result); + return check_cookie(ctx, 2, &test_uprobe_2_result); } =20 SEC("uprobe.session//proc/self/exe:uprobe_multi_func_3") int uprobe_3(struct pt_regs *ctx) { - return check_cookie(3, &test_uprobe_3_result); + return check_cookie(ctx, 3, &test_uprobe_3_result); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursi= ve.c b/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c index 8fbcd69fae22..3ce309248a04 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c @@ -1,9 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 -#include +#include #include #include #include -#include "bpf_kfuncs.h" #include "bpf_misc.h" =20 char _license[] SEC("license") =3D "GPL"; @@ -16,11 +15,11 @@ int idx_return =3D 0; __u64 test_uprobe_cookie_entry[6]; __u64 test_uprobe_cookie_return[3]; =20 -static int check_cookie(void) +static int check_cookie(struct pt_regs *ctx) { - __u64 *cookie =3D bpf_session_cookie(); + __u64 *cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) { + if (bpf_session_is_return(ctx)) { if (idx_return >=3D ARRAY_SIZE(test_uprobe_cookie_return)) return 1; test_uprobe_cookie_return[idx_return++] =3D *cookie; @@ -40,5 +39,5 @@ int uprobe_recursive(struct pt_regs *ctx) if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - return check_cookie(); + return check_cookie(ctx); } --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.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 5719914EC73 for ; Sat, 24 Jan 2026 03:32:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225529; cv=none; b=qisojwvhxYZD6BHudFf0SX/S+6L7ui8fmnvUec233J9rRJJ/cFdZ6HTCXfLhAeBQEqLeBxspsYRb/X2JlR+pibtz2W1oLxtLb/lUKGXzYUKfmS5R3pJJCtOYfbc9YFdo6E6FKGy79UltmV3n4aiXanqN2p0oKDUJS+EORd0Skh8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225529; c=relaxed/simple; bh=K9b/t9XXOnTLdqEXsxRrneyFY/nndVnsOJwQPHo9UMg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m60bI52GFFBLvy0FTgVuGL1/wEvpTDYXqUV/gKhRdwasbcr2axsZig6DdyOpqSOrWI6ev0WkGEf3iiRHFGYazztGKM7FoL8751TbjPa3woc20R6+BZ1tXy3mQemDLvPkqGqzKrfWFKcW+oVOSPpdXUjey4jxaXC/8HL10N8+4Xc= 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=E/05hELD; arc=none smtp.client-ip=209.85.214.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="E/05hELD" Received: by mail-pl1-f194.google.com with SMTP id d9443c01a7336-2a07fac8aa1so22316125ad.1 for ; Fri, 23 Jan 2026 19:32:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225528; x=1769830328; 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=uaR31gnegNovKwQZUAOooLQs9UdrAAfPr7JJtoM3Rv0=; b=E/05hELDH2nfp1ornuzxqqyny93J4FwgM0+/ihJlm3s9bJtm0OwjTZHyrRYLoZC7U2 os0DAhLQrmxdUMBu/rrHanQ12534tVJS9WW+0wxiAChcQ2jadYn8fERL8zvG1Z1c+cVt bElHm+NMj+1rAAUusN5n/aWFqzc4FvJIVvJnEyZmYHFsXWlJr9zXMZXRunGnjU5cgQRS 0Xkrey+bxhzBxylCTvJphm2WnIo2xJWLcOarzXG2GJfYtOlDCmgmR2GMCoYzhPY58TYs ZJzcWhjkP8gzEBlaKzT6nDBroUIE61WpCvS+/5wEu8gvox7tkNVBY2lngIDWlaX0NbMF wclA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225528; x=1769830328; 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=uaR31gnegNovKwQZUAOooLQs9UdrAAfPr7JJtoM3Rv0=; b=c46MpnOeaIBJ/acVRLeXQi80eJM3Jr0MRzhWNcz74vZqoBCd1iSjesjgeVV+ej1Wkc PQtgVqwqC/9vBC+eX+fMAKEAtm0aAdpGv+jgARzghmUuhy9qLnh9SAZpQO0paN8IJgAm PH+Jq425V/A8diDtNFmlZJt7mORS2Qj474ESnEf6MPDFFn7amWQi8j7yUtlMBUsKJmXf 9EnOhWARI4njtKuxHuVDglG3b9UWXtJUq6Dn8r/VV2/p5/RVfMl/t8lY9qt7XL0JP5S1 4z69/jwHJXeahyzS4sEF4VfrZGHRNOcEzVVtW+SPZ3MUZd+CZom34D8nJz+lZDV9x9+d 1mPg== X-Forwarded-Encrypted: i=1; AJvYcCW7W126y8kMtxiDbqVCHJe9k2UswUk5pe99rbUZcAruLkbb40QBor7iK9SMRzPTW4bjm/A/WvF6IVPVuyw=@vger.kernel.org X-Gm-Message-State: AOJu0Yzj1q6Hw9UkSPYRriAXe2KpEgbppO8JRQuujkX1hXd05iSGzPVh 7iJ3mHXUl1CXmIpi053mMNBJCbrkth2HSlInerSp9n7jvOJWLDa1d3xg X-Gm-Gg: AZuq6aKAQTZUFyf8zBKMNjrncdWNb5Hon/+8nrQ7ZA6ZVxkvQdtey3Y6sbITX2emEKX 4ESD/ZEzJR6Vl7K8cfzhFLMwSwqrG/VeGo1VUgavDMOrIgZrnh5f5E0womTSQK+od5bBDDenNk2 nQ9vMuQD/FfpsZgRYfbXMqRWiE8pf3lkT2M0/9NRlfdvNVE+zXUfM3HLuyp2Q4SQL+JWiCiM8Xu ZZpVqT+aJMgTTMrhHf46LFyV0OdNNtmPvv+0o0k96WseyWOiMeGJguFnnq1UrGo9mjJRlrvzWQz Cq9B6Fntly+BmU4txWNvBJ/0QwtZJ7H76W37uEFx3U5M+V4QNd87HK3Q0DmXFBvxq5mHlXzeJCw qLZ1hDANQdnUfqPrn4HrGE9NxRFX/gFgXwI5nyklk6xWnnisg9/T7WSWxNS8VoVmLbUqaiBKeZp HiiOaQFQxM X-Received: by 2002:a17:903:380d:b0:2a0:9028:11af with SMTP id d9443c01a7336-2a7fe75c647mr48658585ad.59.1769225527714; Fri, 23 Jan 2026 19:32:07 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.31.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:32:07 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 04/13] bpf: support fsession for bpf_session_is_return Date: Sat, 24 Jan 2026 11:31:10 +0800 Message-ID: <20260124033119.28682-5-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-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_IS_RETURN_SHIFT) in ((u64 *)ctx)[-1] to store the "is_return" flag. The logic of bpf_session_is_return() for fsession is implemented in the verifier by inline following code: bool bpf_session_is_return(void *ctx) { return (((u64 *)ctx)[-1] >> BPF_TRAMP_IS_RETURN_SHIFT) & 1; } Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v11: - rename BPF_TRAMP_SHIFT_IS_RETURN to BPF_TRAMP_IS_RETURN_SHIFT v10: - fix the wrong description of bpf_session_is_return() in commit log and comment - rename the prefix from BPF_TRAMP_M_ tp BPF_TRAMP_SHIFT_ - remove the definition of BPF_TRAMP_M_NR_ARGS - use 63 for the shift of BPF_TRAMP_SHIFT_IS_RETURN - check the program type in bpf_session_filter() v9: - remove the definition of bpf_fsession_is_return() v7: - reuse the kfunc bpf_session_is_return() instead of introduce new kfunc v4: - split out the bpf_fsession_cookie() to another patch v3: - merge the bpf_tracing_is_exit and bpf_fsession_cookie into a single patch v2: - store the session flags after return value, instead of before nr_args - inline the bpf_tracing_is_exit, as Jiri suggested --- include/linux/bpf.h | 2 ++ kernel/bpf/verifier.c | 13 +++++++++++++ kernel/trace/bpf_trace.c | 39 ++++++++++++++++++++++++++------------- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 41228b0add52..29eecd79352e 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1229,6 +1229,8 @@ enum { #endif }; =20 +#define BPF_TRAMP_IS_RETURN_SHIFT 63 + 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 0fa73d56cb8b..d04aea235a12 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -23011,6 +23011,19 @@ static int fixup_kfunc_call(struct bpf_verifier_en= v *env, struct bpf_insn *insn, desc->func_id =3D=3D special_kfunc_list[KF_bpf_rdonly_cast]) { insn_buf[0] =3D BPF_MOV64_REG(BPF_REG_0, BPF_REG_1); *cnt =3D 1; + } else if (desc->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_retu= rn] && + env->prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + /* + * inline the bpf_session_is_return() for fsession: + * bool bpf_session_is_return(void *ctx) + * { + * return (((u64 *)ctx)[-1] >> BPF_TRAMP_IS_RETURN_SHIFT) & 1; + * } + */ + 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_IS_RETURN_SH= IFT); + 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 13f0a2de33b7..f7baeb8278ca 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -1286,7 +1286,8 @@ static bool is_kprobe_multi(const struct bpf_prog *pr= og) =20 static inline bool is_kprobe_session(const struct bpf_prog *prog) { - return prog->expected_attach_type =3D=3D BPF_TRACE_KPROBE_SESSION; + return prog->type =3D=3D BPF_PROG_TYPE_KPROBE && + prog->expected_attach_type =3D=3D BPF_TRACE_KPROBE_SESSION; } =20 static inline bool is_uprobe_multi(const struct bpf_prog *prog) @@ -1297,7 +1298,14 @@ static inline bool is_uprobe_multi(const struct bpf_= prog *prog) =20 static inline bool is_uprobe_session(const struct bpf_prog *prog) { - return prog->expected_attach_type =3D=3D BPF_TRACE_UPROBE_SESSION; + return prog->type =3D=3D BPF_PROG_TYPE_KPROBE && + prog->expected_attach_type =3D=3D BPF_TRACE_UPROBE_SESSION; +} + +static inline bool is_trace_fsession(const struct bpf_prog *prog) +{ + return prog->type =3D=3D BPF_PROG_TYPE_TRACING && + prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION; } =20 static const struct bpf_func_proto * @@ -3341,34 +3349,39 @@ __bpf_kfunc __u64 *bpf_session_cookie(void *ctx) =20 __bpf_kfunc_end_defs(); =20 -BTF_KFUNCS_START(kprobe_multi_kfunc_set_ids) +BTF_KFUNCS_START(session_kfunc_set_ids) BTF_ID_FLAGS(func, bpf_session_is_return) BTF_ID_FLAGS(func, bpf_session_cookie) -BTF_KFUNCS_END(kprobe_multi_kfunc_set_ids) +BTF_KFUNCS_END(session_kfunc_set_ids) =20 -static int bpf_kprobe_multi_filter(const struct bpf_prog *prog, u32 kfunc_= id) +static int bpf_session_filter(const struct bpf_prog *prog, u32 kfunc_id) { - if (!btf_id_set8_contains(&kprobe_multi_kfunc_set_ids, kfunc_id)) + if (!btf_id_set8_contains(&session_kfunc_set_ids, kfunc_id)) return 0; =20 - if (!is_kprobe_session(prog) && !is_uprobe_session(prog)) + if (!is_kprobe_session(prog) && !is_uprobe_session(prog) && !is_trace_fse= ssion(prog)) return -EACCES; =20 return 0; } =20 -static const struct btf_kfunc_id_set bpf_kprobe_multi_kfunc_set =3D { +static const struct btf_kfunc_id_set bpf_session_kfunc_set =3D { .owner =3D THIS_MODULE, - .set =3D &kprobe_multi_kfunc_set_ids, - .filter =3D bpf_kprobe_multi_filter, + .set =3D &session_kfunc_set_ids, + .filter =3D bpf_session_filter, }; =20 -static int __init bpf_kprobe_multi_kfuncs_init(void) +static int __init bpf_trace_kfuncs_init(void) { - return register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_kprobe_multi_= kfunc_set); + int err =3D 0; + + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_sessi= on_kfunc_set); + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_TRACING, &bpf_sess= ion_kfunc_set); + + return err; } =20 -late_initcall(bpf_kprobe_multi_kfuncs_init); +late_initcall(bpf_trace_kfuncs_init); =20 typedef int (*copy_fn_t)(void *dst, const void *src, u32 size, struct task= _struct *tsk); =20 --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.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 74FA914EC73 for ; Sat, 24 Jan 2026 03:32:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225538; cv=none; b=QPGJrJExr5Y87+2WZyMSrOvJkPYTXUG+tqXTxawQyqvqDbI6f3WLUj9Scdts7BWGFlPGhWA7Xe48YXfywPjOzhnBg/9/6VCa3dSR9W2RVb7AEPmGaah8F7E38bv5N9aHzNQPfSeRVdSCkxmGNbyN75TywKoapH5cWB11YJTnD2k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225538; c=relaxed/simple; bh=kjcr3U+Eej2jkvLdErMnd6YR7FAn98KttpJB/4PZM7c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LJgtNsLjxevI+DwuLrBWU+3D2YN2JwQKsWA+22q68139nTgQAamPFkZTPk9q7iWc9wm5kWFyNZNtP1V/1q0aKPVK5Gjh3c/ZCEOxyZAdpvstRVsgcfxQWWdYeSIKVKaiQqgZzl7ENXAcFXqRCeLJV2LN1Q6cRVT1oqlTcbeZOis= 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=eS6IdWkj; arc=none smtp.client-ip=209.85.214.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="eS6IdWkj" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2a743050256so19515855ad.3 for ; Fri, 23 Jan 2026 19:32:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225537; x=1769830337; 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=LRFPc/7UJMwRjQVl87T1d/8z+6sYjAGIhOZdpUb7X2k=; b=eS6IdWkjCUdqG9J8pG3uEMgxQGAr9KOVpwPoKUHj3GbIh90zP22hIvD9YWdiCsnzPs wwY8fwoG7Nxhjs6dGwGX9lbqdO/BYvac69UB5pEyq3OYo58R97ZPfOlcLCHPbPMAk+UQ qrQRaoH/ZnfGtgrFsrLT7tUGX+F99dfj+vHVBCL3qmHfSP36c5rsP/3YZ8rmtAqfjdX+ IIg8JtbMMYpgfFYq2sKb//pOECAevwd/pdMsaR7gslVsa7VqOxjk0U/0Fq/vyTrJV7lf 74vJ9cLYvKzUE2A59yVE/r7CllnrkmCOEM4/awtYKEaCGFgjtDxyAwAzign7SSkyRFdV 9HQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225537; x=1769830337; 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=LRFPc/7UJMwRjQVl87T1d/8z+6sYjAGIhOZdpUb7X2k=; b=wkvZDkZC9f75YtkwTV5xgeWNy6D3eOGdamo2JFxnZyiLe0xcRc1w2RQBsQIShOTHnL W3RCgJIoWZV6aD5rHehvK5T6nIPN+e9aDGrfInCU3p/JZqcAZCppdtSKocFR4cJPGALK qeE+UZd5iPJAzk4NXRdgsTbF3fe3CBU2GjUPj7HzW/NB4ZuP2FyFGBxI6JzDUmD38Hjy v6QhiyLlobzFzvCaJ51DIgNeJPk/B0p7g+qhQlHi2rcUQm+E0ogQUgE+ir7a4j7MFfYZ W1Sv72sQYG09KXXPWmdL8RLSNafwOzH9daqW6emD1dIFr+lxou74AJBBGu638SscY2sm C4Ng== X-Forwarded-Encrypted: i=1; AJvYcCVrngf4eBz3xos65ghZv4YknfojgAQHLbjxM9aDxfzEJGBpVvfPW/o3Xs+hCAn+ivdlIj/4FwAUjYe8oWM=@vger.kernel.org X-Gm-Message-State: AOJu0YzXy+T6dxnioCo2pKxfI/jL4edXy+DbW2121b/rA49CcTR63i8W foB9cOvR6QJBG00ESS4Ea4eF7HgtNUY2MDcUySWqlxB0tiCgT3jIGnoy X-Gm-Gg: AZuq6aItnBTbmcsGJOk3FxvwftVxLEIBZiT6lj2dyoM6+xNLnGcne5rOVXVKdnlGcBH m1H9Xnritiz5N8YzegF0Ed6Ha9h4NpYZz+4K4sFeK81aYpOlkS8S+5JA88W9KlNbHQm8nGB2ShQ YSrivmfGn8vIi3lod2LzLyZ9uhVYDPeJG4Yzo3cY4lLpF5/nj26rdaWm1MD/JiJu2wBJHJyoBrx rKfGlp6VkUa4Oac+dmhmLGpyO1uHnfMKBdXZP4Y2swlmCsf2DQJNWlg+sWa1hxhPJyHZuyu+Y7o wFcOlUPBdGC7roQdRrrmGWZ94aRkjHK1+TfQB0dsSgurkZexbNW4r3uhT7KPldojPxFMOfA7n0T o6nYCBN307UxX1pyJmqRnoddKDZKqtr0yKjTUau63r98Sn4Vy++p9w5E7N6B2loArTOW6JBBhi4 D6MyUzQGEL X-Received: by 2002:a17:902:d2ce:b0:29f:2b84:652b with SMTP id d9443c01a7336-2a7fe625ffemr60090195ad.29.1769225536593; Fri, 23 Jan 2026 19:32:16 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.32.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:32:16 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 05/13] bpf: support fsession for bpf_session_cookie Date: Sat, 24 Jan 2026 11:31:11 +0800 Message-ID: <20260124033119.28682-6-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-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. The session cookies will be stored in the stack, and the layout of 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 The offset of the cookie for the current bpf program, which is in 8-byte units, is stored in the "(((u64 *)ctx)[-1] >> BPF_TRAMP_COOKIE_INDEX_SHIFT) & 0xFF". Therefore, we can get the session cookie with ((u64 *)ctx)[-offset]. Implement and inline the bpf_session_cookie() for the fsession in the verifier. Signed-off-by: Menglong Dong --- v11: - rename BPF_TRAMP_SHIFT_COOKIE to BPF_TRAMP_COOKIE_INDEX_SHIFT v10: - describe the offset of the session cookie more explicit - make 8 as the bit shift of session cookie - remove the session cookie count limitation v9: - remove the definition of bpf_fsession_cookie() v7: - reuse bpf_session_cookie() instead of introduce new kfunc v5: - remove "cookie_cnt" in struct bpf_trampoline v4: - limit the maximum of the cookie count to 4 - store the session cookies before nr_regs in stack --- include/linux/bpf.h | 15 +++++++++++++++ kernel/bpf/verifier.c | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 29eecd79352e..4427c6e98331 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1229,6 +1229,7 @@ enum { #endif }; =20 +#define BPF_TRAMP_COOKIE_INDEX_SHIFT 8 #define BPF_TRAMP_IS_RETURN_SHIFT 63 =20 struct bpf_tramp_links { @@ -1782,6 +1783,7 @@ struct bpf_prog { enforce_expected_attach_type:1, /* Enforce expected_attach_type checki= ng at attach time */ call_get_stack:1, /* Do we call bpf_get_stack() or bpf_get_stackid() */ call_get_func_ip:1, /* Do we call get_func_ip() */ + call_session_cookie:1, /* Do we call bpf_session_cookie() */ tstamp_type_access:1, /* Accessed __sk_buff->tstamp_type */ sleepable:1; /* BPF program is sleepable */ enum bpf_prog_type type; /* Type of BPF program */ @@ -2190,6 +2192,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/verifier.c b/kernel/bpf/verifier.c index d04aea235a12..c2f2650db9fd 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -14406,6 +14406,9 @@ static int check_kfunc_call(struct bpf_verifier_env= *env, struct bpf_insn *insn, return err; } =20 + if (meta.func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]) + env->prog->call_session_cookie =3D true; + return 0; } =20 @@ -23024,6 +23027,23 @@ 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_IS_RETURN_SH= IFT); insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1); *cnt =3D 3; + } else if (desc->func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]= && + env->prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + /* + * inline bpf_session_cookie() for fsession: + * __u64 *bpf_session_cookie(void *ctx) + * { + * u64 off =3D (((u64 *)ctx)[-1] >> BPF_TRAMP_COOKIE_INDEX_SHIFT) = & 0xFF; + * return &((u64 *)ctx)[-off]; + * } + */ + insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_COOKIE_INDEX= _SHIFT); + insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFF); + insn_buf[3] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3); + insn_buf[4] =3D BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1); + insn_buf[5] =3D BPF_ALU64_IMM(BPF_NEG, BPF_REG_0, 0); + *cnt =3D 6; } =20 if (env->insn_aux_data[insn_idx].arg_prog) { --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.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 1CC7420B7ED for ; Sat, 24 Jan 2026 03:32:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225547; cv=none; b=Ea7xzpo+FXFYh+k4lzTgoo14BEq4uWU05jC6Z3d2t14W/9HJAbg2KVxrZBdIGk9Lp10FWU1K9b980UUTxJwzKM0T/IUqYFk6jodu9YCy+cAxkcU1bY49VJPLrdP+mBd5CPgIj4ilhUFr5B+pYPmPrE6aOn4/Hm5T3WSQILFYJQY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225547; c=relaxed/simple; bh=6fOLPr5pZFj/RQ+K6yXNXzxNF1aapP52tKW6Swnvtbk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HatZUG3/RJOqfiNB7J0Apsm7xwcZ8TihZ8dQI4BgRcejo/DB7c/WG96/6JnyRAGr+odUGqjjBR7qQgehjyGfhgCmEj8+qTywhHAzzdQwY1XhjKmGGHCUZvw5guXLIyqrVVZzgWzzpogcBLM1gPH0BY3hGHOmnvfG1tSONzZ/s60= 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=P4sTzHWN; arc=none smtp.client-ip=209.85.214.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="P4sTzHWN" Received: by mail-pl1-f195.google.com with SMTP id d9443c01a7336-2a7786d7895so18689215ad.1 for ; Fri, 23 Jan 2026 19:32:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225545; x=1769830345; 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=L3QmrLYBEBYXBAfPFlkqBudM2njHTQyGi8eiKfdRBPI=; b=P4sTzHWN3PRDg0w0+2vgfYEanXxQwsSwI5djxfUsdXnEx0gwJbjRlFOtAwFoANjWvK Z4wTCb4T3A41r4t3Q/PphmNDFBZXslJYpsK/Zw05O4Iivq0nCc5uakFvpAxIkte1fxKs P3lUPaxtSnNdktQq3NszGF2T1Q+sbKK+dYFlF5JGprZiXPkgCxDhSRm5J7QhA/6aqNl7 Ld64zW3potEWsHmLCthRwQODsAf034rD4vEep19b0dMcJVK27aNJgwi6t0NQMiBzR0HU W5B+rfBmICh61KvG/ywI6yewLwNWJ63J8hLgbtb4XUFMNcfbMGW0Q9z1wK7MShf/MHKj ro/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225545; x=1769830345; 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=L3QmrLYBEBYXBAfPFlkqBudM2njHTQyGi8eiKfdRBPI=; b=Comx+f+y2wWaWkzXYmmSDjXzaCO5HUPayaMLwN5gPYgqNAbRMDzfeDg0I3JCVPuvC5 1wuOL+UoCLMMvY7WZ4LRDNoketWtDHwj6PjhKWiLBDWGeyrqRyZnGsNtc3QSE+HrFBKM Znj/Te9Hc18LGtowaGux0aCIlyldRgpS5DcGRa3/TrcLMp70IuMXEgcJJTXMKRp68dtE kRkW7e5CRrocie29OJLaN5d27VgM2F8jarzigAHaiYFBbHlDSuyF3U61I8y/583meZBv kBcdy1bpbc8A+qji/Et5l3D+8dD7pjjFWvgqakoRxFyYNqXAljJU9Rm5ZIQa/BMH6SDF CKFA== X-Forwarded-Encrypted: i=1; AJvYcCWrASE9/aRgSD6yGGsP901wLKkQxfg+RSdCp2qzZS1imoXoTJ0OVoG4ebMcESI0JSCdtNs++vWU04U2tdQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxTDRx7fIU6bUKcVMT3tHMgtBaZRvDmBGRlcF7aDoRi1uj4CwFa BbIh4WRlAkI9xPQlR3GWbfpEaOU1yVj2Gw5E2OhjG/n5ko1pwLZ3pIm6 X-Gm-Gg: AZuq6aIU3UnjtGk477tE3k8YlDC4GjQpRULwZQupEiCyn3ESnDIhY4CmUEpSXtJ5FYk w6A/fIURDjvM97N80Ffsk4DRTpsye1dTZQn8+i3mnxbSXvo5RfK1PqAB6wgpmg3JxRcqRCd3ega Df7ouop66fVhBflRjCzO9fhyaj9xzXXnoiCMYh/UlggCRXbnJWl3UPwtAffDynEHOhSHpe6F1ll 5wRjkwkGiZCzphoMNkJjpqIPnA4+tgDZgpUh3MVCWZNF2tN2gM9z83I+4nCIxybtAShOvn2PuXn A52DkHO6Px4opri9rlp4RfaEdRGUeKn6q8zN8KGn5rjsY5D/b+QsZJ1FwMU/9c/WmxzYorDxGnF fa1S/y4IeWaZKCZMmx0tV5957+FKHgB46Gvx2IpIrZ2uTbVs6F0r3WB9zbjf5VGHJ+IhETL3r/U aKdeLfRkOa X-Received: by 2002:a17:903:2443:b0:2a7:f369:4de8 with SMTP id d9443c01a7336-2a7fe73eb13mr49369805ad.42.1769225545358; Fri, 23 Jan 2026 19:32:25 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.32.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:32:25 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 06/13] bpf,x86: introduce emit_store_stack_imm64() for trampoline Date: Sat, 24 Jan 2026 11:31:12 +0800 Message-ID: <20260124033119.28682-7-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce the helper emit_store_stack_imm64(), which is used to store a imm64 to the stack with the help of a register. Signed-off-by: Menglong Dong --- v10: - add the "reg" to the function arguments of emit_store_stack_imm64() - use the positive offset in emit_store_stack_imm64() - remove some unnecessary comment, as we already have proper comment in emit_store_stack_imm64() v9: - rename emit_st_r0_imm64() to emit_store_stack_imm64() --- arch/x86/net/bpf_jit_comp.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index e3b1c4b1d550..2f31331955b5 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -1300,6 +1300,16 @@ static void emit_st_r12(u8 **pprog, u32 size, u32 ds= t_reg, int off, int imm) emit_st_index(pprog, size, dst_reg, X86_REG_R12, off, imm); } =20 +static void emit_store_stack_imm64(u8 **pprog, int reg, int stack_off, u64= imm64) +{ + /* + * mov reg, imm64 + * mov QWORD PTR [rbp + stack_off], reg + */ + emit_mov_imm64(pprog, reg, imm64 >> 32, (u32) imm64); + emit_stx(pprog, BPF_DW, BPF_REG_FP, reg, stack_off); +} + static int emit_atomic_rmw(u8 **pprog, u32 atomic_op, u32 dst_reg, u32 src_reg, s16 off, u8 bpf_size) { @@ -3348,20 +3358,12 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, void *rw_im /* mov QWORD PTR [rbp - rbx_off], rbx */ emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_6, -rbx_off); =20 - /* Store number of argument registers of the traced function: - * 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); + /* Store number of argument registers of the traced function */ + emit_store_stack_imm64(&prog, BPF_REG_0, -nregs_off, nr_regs); =20 if (flags & BPF_TRAMP_F_IP_ARG) { - /* Store IP address of the traced function: - * movabsq rax, func_addr - * mov QWORD PTR [rbp - ip_off], rax - */ - emit_mov_imm64(&prog, BPF_REG_0, (long) func_addr >> 32, (u32) (long) fu= nc_addr); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -ip_off); + /* Store IP address of the traced function */ + emit_store_stack_imm64(&prog, BPF_REG_0, -ip_off, (long)func_addr); } =20 save_args(m, &prog, regs_off, false, flags); --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.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 095FA20B7ED for ; Sat, 24 Jan 2026 03:32:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225557; cv=none; b=NNNfXZKyZw+M5CYtx6UP0MA08L9aJ2y1/1/QKvjqkb6GTD2IwUhVVx+5MtJ8ML7JTfuEEKXxC7ZspIcdIIrxK4SkMgYHHM8+EadD8UEDGapiIGbZQcha4CB4V3BY7Lk0JZR3VdOO/S7Tc9lyi4/GVKKKcBJub5XHWjfRiLVgBEw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225557; c=relaxed/simple; bh=EjnGJ2RP/1JCMlZMGRd+YlmPnDkDXdlwIR1/R/iLIq0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=X9AFzg96AVNykPyrrp2tQM3nSuD7OCplfZ63xSQ8wJdUblGbr6EIbsuM6kGYu+TFtxMsS6Az4moTwabh/x+1LV9IJVpOcv4xtfS7JT0xuKbNFHr8Iq1g89XDTvnkjCmgQubg9nyJAoV/A2iZdP/EzeNydc5jzUm1s/BnVxK0NHY= 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=d1823paZ; arc=none smtp.client-ip=209.85.214.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="d1823paZ" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2a7a94c6d4fso13476265ad.0 for ; Fri, 23 Jan 2026 19:32:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225554; x=1769830354; 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=1d8/vt9Be4w9qa2wV5mcrLfqVviutZM7Jiw2hF3kLB8=; b=d1823paZw4r9MzXNS6avly14JwvRFGvzDY3Ytv+15ec7wlm1ovNNzyxhH+pndekILI 9wwLRbTSJLNQSOc4l2ah2K1dt5xKLFVRwer0GjDPJWMC0ecRk2SSGCoJxDn9HIelmZZw 2/UkTeTtqIn82iOHEIczaE8BAqWt1tIBQBG652Cummr08BZJqtIj20j9/PL5r4N6o/AP PlCePVsTOzMELu+Cz/7YCXLhtaaj+5J+LC5sD7RXojTNoOnPrvS9cd13qB87fShvoObh F3F5V1W9emwyAe+ytnZbQ/QxijvAW5nEwwnehCwTsFlcV/Z1zUvnxdz3hkQ6c/PJXwZ1 L8lg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225554; x=1769830354; 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=1d8/vt9Be4w9qa2wV5mcrLfqVviutZM7Jiw2hF3kLB8=; b=dhs3lnCLbP3Kjurh7pFP35xtb3LpqZTUQyVMKSkogTLznwovCw0T+QHTiUbGp77wWw WALxxBKwNCUPF0yBOhMdkmXu7CgUXEcV90vXA/bVCoQ8HDf1Xod+FLPmuSGZ/47z2X5l LnvEvHia/4CSyTXluyeNpCkvCMovJIqPfbWNfQKrXg4cxkH7gvVtKkQRVKWoVJA66so/ TQeyOD1xHIeMuDLf33eXmiIK8DJVnu2eApmHEQ1yq4ny1nwl1+FXjP3gUUcpTTYdJ1M+ 7C2AmbNVuDAzhbb0qSbmVhiJdKEgcA9OJLQJy1SWr2Aiy3cIO94gSDx5YEvOwoG6s5nj PevQ== X-Forwarded-Encrypted: i=1; AJvYcCWaGuaP9y3kwrvYu7z1ybl+AZmDY3vXRzRZ37unyM2BR/ljUr5h3/DmL553f0Gdis9348NZWadppyEkumk=@vger.kernel.org X-Gm-Message-State: AOJu0Yw2B3/7qeozJVEwGxghPv6LOKSqDRrVYP+nch9APLQncqI2P3Oo a9HXz+AHYOJAVOaMC9yb0HM1CzNQfOFVwX0yGjVFbmBjqpvlqYgrCrf2 X-Gm-Gg: AZuq6aIWKbG3At7tIqphztPxkmvKBW2AxXwQTMRnxuHOY+DzYLxXvqPk/fJQFDlfe0/ PTYRTiCtwcwtlYEKmprxKvsxqoBeBzx1DECi1N04kJw/aTE69rtFic/kq96/JnQSoG8piOzbDs/ kGv/RStrR+rlDikcsnEJ5XiJO/12ybEm3V23i4DxssKZbzc+1tgEjUR8WTCVaZzl8Ws9vXknlOy AC8g8zCbQOfnA6ji+qQ1MrSF0yBHG77Woa8bOY86w02j69kKYnF7pdO7Zh4IqoH8ZrpaSGNuthj XqiBeBwyQVrO/Dc1jEtWrvPCFsex3KHGsHc0WcahJQKANxgB2baOA1OwdaFlv6jMSYI5eiQkGPa I+dGCIGn7O452vYJQoHUiEFmPk6SX/GBR751EiY0J4jIkNElVid+xKCpBPwNBKvnuOm33EgpQgL e88Sl4TML2 X-Received: by 2002:a17:902:e884:b0:2a7:80bf:3131 with SMTP id d9443c01a7336-2a7fe77b3fdmr47454115ad.58.1769225554264; Fri, 23 Jan 2026 19:32:34 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.32.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:32:33 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 07/13] bpf,x86: add fsession support for x86_64 Date: Sat, 24 Jan 2026 11:31:13 +0800 Message-ID: <20260124033119.28682-8-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-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 --- v10: - use "|" for func_meta instead of "+" - pass the "func_meta_off" to invoke_bpf() explicitly, instead of computing it with "stack_size + 8" - pass the "cookie_off" to invoke_bpf() instead of computing the current cookie index with "func_meta" v5: - add the variable "func_meta" - define cookie_off in a new line v4: - some adjustment to the 1st patch, such as we get the fsession prog from fentry and fexit hlist - remove the supporting of skipping fexit with fentry return non-zero v2: - add session cookie support - add the session stuff after return value, instead of before nr_args --- arch/x86/net/bpf_jit_comp.c | 52 ++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index 2f31331955b5..5a075e06cf45 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -3094,13 +3094,19 @@ static int emit_cond_near_jump(u8 **pprog, void *fu= nc, void *ip, u8 jmp_cond) =20 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) + int run_ctx_off, int func_meta_off, bool save_ret, + void *image, void *rw_image, u64 func_meta, + int cookie_off) { - int i; + int i, cur_cookie =3D (cookie_off - stack_size) / 8; u8 *prog =3D *pprog; =20 for (i =3D 0; i < tl->nr_links; i++) { + if (tl->links[i]->link.prog->call_session_cookie) { + emit_store_stack_imm64(&prog, BPF_REG_0, -func_meta_off, + func_meta | (cur_cookie << BPF_TRAMP_COOKIE_INDEX_SHIFT)); + cur_cookie--; + } if (invoke_bpf_prog(m, &prog, tl->links[i], stack_size, run_ctx_off, save_ret, image, rw_image)) return -EINVAL; @@ -3218,12 +3224,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, void *rw_im void *func_addr) { int i, ret, nr_regs =3D m->nr_args, stack_size =3D 0; - int regs_off, nregs_off, ip_off, run_ctx_off, arg_stack_off, rbx_off; + int regs_off, func_meta_off, ip_off, run_ctx_off, arg_stack_off, rbx_off; struct bpf_tramp_links *fentry =3D &tlinks[BPF_TRAMP_FENTRY]; 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 @@ -3259,7 +3267,7 @@ static int __arch_prepare_bpf_trampoline(struct bpf_t= ramp_image *im, void *rw_im * [ ... ] * RBP - regs_off [ reg_arg1 ] program's ctx pointer * - * RBP - nregs_off [ regs count ] always + * RBP - func_meta_off [ regs count, etc ] always * * RBP - ip_off [ traced function ] BPF_TRAMP_F_IP_ARG flag * @@ -3282,15 +3290,20 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, void *rw_im stack_size +=3D nr_regs * 8; regs_off =3D stack_size; =20 - /* regs count */ + /* function matedata, such as regs count */ stack_size +=3D 8; - nregs_off =3D stack_size; + func_meta_off =3D stack_size; =20 if (flags & BPF_TRAMP_F_IP_ARG) stack_size +=3D 8; /* room for IP address argument */ =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 @@ -3358,8 +3371,9 @@ static int __arch_prepare_bpf_trampoline(struct bpf_t= ramp_image *im, void *rw_im /* mov QWORD PTR [rbp - rbx_off], rbx */ emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_6, -rbx_off); =20 + func_meta =3D nr_regs; /* Store number of argument registers of the traced function */ - emit_store_stack_imm64(&prog, BPF_REG_0, -nregs_off, nr_regs); + emit_store_stack_imm64(&prog, BPF_REG_0, -func_meta_off, func_meta); =20 if (flags & BPF_TRAMP_F_IP_ARG) { /* Store IP address of the traced function */ @@ -3378,9 +3392,18 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im } } =20 + if (bpf_fsession_cnt(tlinks)) { + /* clear all the session cookies' value */ + for (int i =3D 0; i < cookie_cnt; i++) + emit_store_stack_imm64(&prog, BPF_REG_0, -cookie_off + 8 * i, 0); + /* clear the return value to make sure fentry always get 0 */ + emit_store_stack_imm64(&prog, BPF_REG_0, -8, 0); + } + 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)) + if (invoke_bpf(m, &prog, fentry, regs_off, run_ctx_off, func_meta_off, + flags & BPF_TRAMP_F_RET_FENTRY_RET, image, rw_image, + func_meta, cookie_off)) return -EINVAL; } =20 @@ -3440,9 +3463,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 (1ULL << BPF_TRAMP_IS_RETURN_SHIFT); + if (bpf_fsession_cnt(tlinks)) + emit_store_stack_imm64(&prog, BPF_REG_0, -func_meta_off, func_meta); + if (fexit->nr_links) { - if (invoke_bpf(m, &prog, fexit, regs_off, run_ctx_off, - false, image, rw_image)) { + if (invoke_bpf(m, &prog, fexit, regs_off, run_ctx_off, func_meta_off, + false, image, rw_image, func_meta, cookie_off)) { ret =3D -EINVAL; goto cleanup; } --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.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 0407820B7ED for ; Sat, 24 Jan 2026 03:32:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225565; cv=none; b=LWFOqDvnr1WT/uPplHODboLnu1hdGB+jucAZpNU0KDlvIM4QcToiWz4LgqK/qc9N2X3c8bcEfo++utx5L+raVazL5vTzyYoNYtQSX1gpP95iWdhuWoumLZqS0Lx6b11I/TjkvtHbTp3GikXSqI8R6n+0OJfA4g2sdGj+Zyfs26Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225565; c=relaxed/simple; bh=7cC1ms5ub9SS0bly7QzzdjNJghADRqDQHVSuwXZiOkM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EmY0k5gqri021LHCX12sjU+7Y9sjloos3PGMTJMTavU7R9UaH8T7WQ7FXvfd2NZ+vTD2xJFhWY3RxOiSyljP0/w/gCHgmMnrXk6XWdIBLJqzbSqGqY2hNJOA15k42/HLdHM0zmdhd+/f5lqIhWFuru/f1uWUgiEHpycfr7rF9qQ= 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=BVL61iVI; arc=none smtp.client-ip=209.85.214.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="BVL61iVI" Received: by mail-pl1-f195.google.com with SMTP id d9443c01a7336-2a07f8dd9cdso20677115ad.1 for ; Fri, 23 Jan 2026 19:32:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225563; x=1769830363; 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=TG3OIJ4OsXGkuiYroAWEp+caX5ZqVGcvi7JJxvZjj6c=; b=BVL61iVI88CRHYI7OLo9h9s94Hgiadlsw8Z0PkXAd08S70/8fsnKi+3/R5yqnbt3IC QQFVHK9pHRD2JWe2WFBNcomPXRafnHZ45a6VLKKEjW/wt9xV9FYeMR56tli5UZcsKh2w A1tVpZgolMpKvqjupMzu8/YPDgcLDSCA4uj/z+dFp1SmVi0MYkMpB3e/yqy5g7Oyt587 yew/9wWqSf+zFSO+S9KglL/iMhkXr6prN3yGNRJN7P/sqWVTBks3tpf17FW1tgJa/tHT Y2YWUg2M5Np9Keu7QMEHvnmLhzsE2Rwlr3fC6tsV+mI5b3J8XeB/a46xL6AVDgZpwxms wbQQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225563; x=1769830363; 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=TG3OIJ4OsXGkuiYroAWEp+caX5ZqVGcvi7JJxvZjj6c=; b=rmVKksO7CHo0PsbDKuirS0UJTkVPLyvxBE9npY8KEV1zG8jgDPCQRt3exWQi+6nvPa 2XVYSYJjyogxOAa84HXMwrb0kavsuiFUVGmhaCLhzJuNAvtuunxanJrvwc22ZXSPeilG mrwcm/pabsDdxxnZTpRWbvBTna7i9mF4fCQ762SVAQnMdk40zGQbrMqqq5f+RHF/FHFF qt2E9aJ9sFGa/Ko5ip2X2auVufQKqdy1Bge8agvZFzX0tzIFg+hY3ca369wTfIKLDOb6 WtZu0cmi2HGMjwn3moNnvnbBvLA+//w7SSYzkJAbBrsYghNU19UlURsxvlrqPdcZ4onG x1MQ== X-Forwarded-Encrypted: i=1; AJvYcCWAdhfn4o+HKQphlZfzPJJcatn7tdG82ogpI+Zb+nJuTH/QXyDFC5ZKVaramb7juquxF9JlZZp+G6V9NEw=@vger.kernel.org X-Gm-Message-State: AOJu0YyZfFeWFPpaACN/lwvAokIqnc5guB/oizYEArvhnWxbWEGXIjZB bhCrkEPeERhNlJimyfso88ATkKAwfFgx1x/MaRRls6sYlCW2p0qItaxr X-Gm-Gg: AZuq6aJWCjbY3g9uqs72rXhhtCdaC8blrP8Letw4pwNYDHPyvn2KJXYyRw10SfuO4Mb lq9cUBQu7DXETFomb71r51c1UozRMXPI2VXfz4VEmXSUQkS4z2R+HZIBKQN700IVhx/+SJnWVRL amgtLcRT0ImEoMKckGZG6YE3LlxbrdN0PBCe5gOPmbbJWIgQOJJdis+YsgFUZdKE+JFOlQ7qpJ7 gnzAnmDDLc+x1lXg7VFciOIpJekhUX0NjyEVG4AAfYjkzTReDxhxAgT6sZHaR04GIP3xoCWaT05 d1MUysHBNnk2IficSbj+qNrRhCma0eeuWkFx8uqnoY7S8d8DPcFoAMYYZXjob09Ecm/UPg+BZQ5 8PhJQsZR0dhrrCiAo8vozddzWxdOljR+sVy52SVjf6IetZAwy2010sPFBiaVtifXLzTBEaY81cv sw37Hh/5HKbdOTlsXPMag= X-Received: by 2002:a17:902:d2c2:b0:2a0:daa7:8a57 with SMTP id d9443c01a7336-2a7fe6260dcmr51787635ad.30.1769225563119; Fri, 23 Jan 2026 19:32:43 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.32.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:32:42 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 08/13] libbpf: add fsession support Date: Sat, 24 Jan 2026 11:31:14 +0800 Message-ID: <20260124033119.28682-9-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-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. Signed-off-by: Menglong Dong --- v10: - split the modification to bpftool to a separate patch v5: - remove the handling of BPF_TRACE_SESSION in legacy fallback path for BPF_RAW_TRACEPOINT_OPEN - use fsession terminology consistently --- tools/lib/bpf/bpf.c | 1 + tools/lib/bpf/libbpf.c | 3 +++ 2 files changed, 4 insertions(+) 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 bbcfd72b07d5..0c8bf0b5cce4 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 Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.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 A7EA120B7ED for ; Sat, 24 Jan 2026 03:32:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225573; cv=none; b=Clfzckg/31MdUhEviHTI/8trD0I33KH4C5Y9/kIDZPF30VMsust+rvpmozfIEr2TqiX29GsqL89W4qQxw6fn8dDolfTWO2tANsxGGrVZEgShll0t5j8A/+Mqtu49dlarrs/8NH+m2pxG1suQ+N20y2lbYTkAQhuH1pDfAb1hlfQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225573; c=relaxed/simple; bh=pPH6IGYSvT73W3XnsSk5F+V+bv692q4Zq0EDWpqk/mQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=WJ7PAogILUIivBpQz079sXN7PYuF8Wb+Y2LrhWTsRCbQNmdibMpzu/jPd719ijQ5lceNjM6GbVevhy4btguWh4GzQb3kn/2OgbDJmhlkbJmqvpq9ZZz6xzCR8sDrEJq/h7DfibbzZAO2U0MN7TNwl6jjITvsa8zAWNUmO3MZpeU= 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=mIyIDRxl; arc=none smtp.client-ip=209.85.214.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="mIyIDRxl" Received: by mail-pl1-f195.google.com with SMTP id d9443c01a7336-2a7d98c1879so14540855ad.3 for ; Fri, 23 Jan 2026 19:32:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225572; x=1769830372; 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=BGHQu6mG6lMqPEadRM+ZfBOS3CsIq7QGGssQ90tpvv4=; b=mIyIDRxl4rApDxd0ajsjrjciNdoE1Cov8kYTlzXYtcTUAvNU/dJ9P4NrMMEG4m+wIi HNIFb4+A+keoA1WI/Yzrm/j2Duf3SIztITiS0MNdKmI0XyilGMHgb6l8jvWXqND0VYyn TQ5U8FjIldUwicMBTNX67UR2aZmxuSqUTnUh57jSynLTWpTwl+wPM1qRh/bQ5zsyoWUc QSRaMvdiG2vii8kbhxXKwhUvHRTKXfq9jEejExCwSyhsia6tE3MUflQgaZk1pN6yp91E DfY24dbfQKXYZLuCka1EfTt33BDiDtZim5HBcnRMcCLFaLEpHo2XWhjo/+yXT1QhPQ04 ZHhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225572; x=1769830372; 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=BGHQu6mG6lMqPEadRM+ZfBOS3CsIq7QGGssQ90tpvv4=; b=MrMUByRv/cQZO1Ng+JRHf8fDW+ussTUi7MvuO2GR3/1KUgIZJiDlujbKS4I8/L7H38 P8bSYKM/m8cbH0q9N3ev4PLQgAJgTuR+mKMOPI4FJx02zpu/xhyIysoiaGk2b5IL0W92 OuYhUjShGFYw3vfhb2PXoguxQTUoh78ajLgAO6e1XKZy4MFM8sSYoxOdGkoObslBeCho O4kl8DPkCMQVCs+OoVwcVdhIfCZf+Lrv1bhAZagASIMstgsOyjktRJNjc/Tks/IEXXkE RAhW7p2j8YFAOGx3zKQW0OmdgzFHmZsSV1vwkSa31VOiWtk6b11tTAfUNcWFyE6AF0vM 1DvA== X-Forwarded-Encrypted: i=1; AJvYcCXpCOCzqnGqgA/HC5NUDfuIPwcWt1bKWPfeMhb649d+P0qRUOvHn0Y1pHSYGwGZZEHJHXzg3l7g6sIuyLo=@vger.kernel.org X-Gm-Message-State: AOJu0YzPpUvSXMujL1In+77BxN3mFQBa+Bg6StIZZhcrTveLIdACLcsS ei5eAINGNIs2dnfZNADAHn5tmh7FA/0V3ZkVwlGU0ZrlZ1CDlHPasjfF X-Gm-Gg: AZuq6aI/YpiMEC1u/LXfQriDed/Gwvm42vlQxrbWEcDUvvQccBRjXctffb0gF/nhm2M OVUaZmAXNzmNXi70h6r+Bz8g6wiBuhc6PlDtrjHkXAWBUNgC9YF7s/Yw+62i2feKCvXnRsUUuXQ CJyd3AwVcDuvPIjRRVNUOX+gbbnKb0STi6EUS1daPKpcg/w46+ycgAPwUUkqXN11LCCsOPHIYvU nMXxjg4+yWdHD5/MJ41NR11CwFnrlqMZJ/GoW85EmWr91c62iqrAmVOu6PcfmQRXlQf3XAsDqu8 RmIthbAn6mFFKLvc9mT+N8J+XNhRQprWgQ7CjoDl+yIWTB6BoEy2U1ey0KWI1JY6qOkDBi7nv+G 6YMzyCTt6l9MLuVk+zexDYiSSATjxd7Bil+8XClCQ89LgmvZXmiLv7vF7vGX78ql3jEhWQpjTed 9669bVQqGBIZARSp9n95o= X-Received: by 2002:a17:902:ec92:b0:2a7:bbe0:f01c with SMTP id d9443c01a7336-2a7fe57b403mr51151305ad.17.1769225571900; Fri, 23 Jan 2026 19:32:51 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.32.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:32:51 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 09/13] bpftool: add fsession support Date: Sat, 24 Jan 2026 11:31:15 +0800 Message-ID: <20260124033119.28682-10-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-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 bpftool. Signed-off-by: Menglong Dong --- tools/bpf/bpftool/common.c | 1 + 1 file changed, 1 insertion(+) 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); --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.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 712561F91F6 for ; Sat, 24 Jan 2026 03:33:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225582; cv=none; b=YSgy88TLf7/GCCTR92bG7tmRrrfeELWUD2lQfbCYZWT11ZwkXjqR/mjFf8cD59zn2fZ9GBW4FqgGAZic+uDSxp1DtOWbN4MYJ7VpnyZgB7uJxSH8OMd773++9q72KdMshOAm7ufFwwdcXKu3T28uUU7MoG3Z93ce4H7/DvTRywE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225582; c=relaxed/simple; bh=NMhfMKw+E8jT0WPxwfHo2GO3dNgWbESa3HXh/xZZFQI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HLY8mvBNrgC+BB7JXp2MgLqNnzEstpLvyexzZwYwlijHEKXQJ+XZ0nLZJVBxK+nvDdkvupJvxlUCjt8q2hl2FyVgHRKBNFLklCcGwA4BnEIVdsioIECets/3qFiUJdXImY3ehIMrTlO0Qu6rZTprKbsEY7f3MFf6MrKeJq28+q4= 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=fookqzox; arc=none smtp.client-ip=209.85.214.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="fookqzox" Received: by mail-pl1-f194.google.com with SMTP id d9443c01a7336-2a79ded11a2so17525135ad.3 for ; Fri, 23 Jan 2026 19:33:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225581; x=1769830381; 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=9tfRq7kpRfTqZi2VUjEMy6rc+Konf695G7WjTH97jCE=; b=fookqzoxgTbUNufIl6XFE4cmUNIZlZUOOxyueKtVetpquqZlygcs8dMTxVKQmR7EvH AG+n2c4nYbuWXf2DYi39E4qaCGTp1xlym0G95pwkkeXU6qW5gb8jy5fre0wEYTCUEd+u 4UUwBn/OX2mSkqEZcaxupA0L6wGx3Qtb83B7ONkMy2Pe1Bng9bVbYkrUbFpOQoW//zn5 9SJeIwtWZ/1n8Wc4JafEi9hCrwO/cjPPXf54+yp2MrBDLWdo4H4mYOoDFFD9MHRbA5oV ifr9P8FhE24mta6YS4Rldrv2VwMTm0MJFQtOJLxbPDXQ+SK8U1Q+0VeCY2/nw4/H22n4 rHdw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225581; x=1769830381; 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=9tfRq7kpRfTqZi2VUjEMy6rc+Konf695G7WjTH97jCE=; b=ZtdRGWsE+0rT1za+vwacNt+8CORoA6tLOV+dZgiURLk2sWTpUrErzQrYWXGhqqacPf RAZEMZSUSa4Uis02yw0F75LDJLrjd9g9YBNVSj7+OYsn/tzeTBsn501g4uJPJO9syS1z H4/dcTAT5yqjYFTtT6fzdEx0+HqXUalBkkKmmQo0sIlTqaSxBYwpujGDxXW/kc6jy4P8 4XXJSOme9iNIi4WTthZMp9H1TLrmU7WCqOVcjGHeXZeM0KUBR4qFHL+U5ynkdvHWcIBN ZpU6tL0Sz1uefKsuJy9Bq8hRSW1096JELvCoAfMg3J4kIF8izOefuc1sU4783ONna0+r zDtA== X-Forwarded-Encrypted: i=1; AJvYcCWrUJ1j9vVonmJ6XtET8/96TBCoce5yWGUzc2yp7KSpn5rcAh4in612rwqNSUjosRoDTcEDPjViNqifYC8=@vger.kernel.org X-Gm-Message-State: AOJu0Yzhh5A91nbzW2Ed2JTm80tFFg85A1dg3Jxj9ep+ZDzR83YK8rbF kzxRpq37RHmyTPz0JCLwxYsmNSfK0QK0KWNPU0lrUQt0WQt6DNuIWz+3 X-Gm-Gg: AZuq6aJOgyM0FGdgxNFC3HqwbNCGSwZ069oyZRhMSSjvRaZzomGL/FXbuOUz/UTwzvE /wA+TCcMCewPGyZvlURPVbaSDCl4Z5RCzyEOD5u/5Bhf8YUHGrPSZbFKEBUoVui6rWkZrLZLs3Q xIuU/DlB/kbXrdZ0HjMxbJYR8E4scyWY/pY1lriulj74VT/MBq11BPO7zrpnv0BaAnp10yDUZWI 6/ddfszUo7Bz74oVAh4HX3a2HK2t+CP4Q06l4JxjMzTUK6Pv57KxJ61rIEaiJFPPKQeeGm4rhbb E/gphCR6ZDfZvTyoZUrHNwLz1ZPxOHHZF4kpcRyxIu/f2ubRNcxEPQyxP6OHrOFcwO097oDLu6X A1l3k0lIYi6pPLMHKc2fgGxnzFFTJQtUnQe+ytLjlmzkJ0FZ40FznUltDjphY02NvoJ/AYpLxFe nJI/P65eVS X-Received: by 2002:a17:902:e88b:b0:2a0:fb1c:144c with SMTP id d9443c01a7336-2a7fe443107mr53079405ad.5.1769225580791; Fri, 23 Jan 2026 19:33:00 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.32.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:33:00 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 10/13] selftests/bpf: add testcases for fsession Date: Sat, 24 Jan 2026 11:31:16 +0800 Message-ID: <20260124033119.28682-11-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add testcases for BPF_TRACE_FSESSION. The function arguments and return value are tested both in the entry and exit. And the kfunc bpf_session_is_ret() is also tested. Signed-off-by: Menglong Dong --- v3: - restructure the testcase by combine the testcases for session cookie and get_func_ip into one patch --- .../selftests/bpf/prog_tests/fsession_test.c | 90 +++++++++++++++++ .../selftests/bpf/progs/fsession_test.c | 97 +++++++++++++++++++ 2 files changed, 187 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..75bb42942b67 --- /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_test")) + 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..0e1b66b2dddc --- /dev/null +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2025 ChinaTelecom */ +#include +#include +#include + +char _license[] SEC("license") =3D "GPL"; + +__u64 test1_entry_result =3D 0; +__u64 test1_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test1, int a, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test1_entry_result =3D a =3D=3D 1 && ret =3D=3D 0; + return 0; + } + + test1_exit_result =3D a =3D=3D 1 && ret =3D=3D 2; + return 0; +} + +__u64 test2_entry_result =3D 0; +__u64 test2_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test3") +int BPF_PROG(test2, char a, int b, __u64 c, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test2_entry_result =3D a =3D=3D 4 && b =3D=3D 5 && c =3D=3D 6 && ret =3D= =3D 0; + return 0; + } + + test2_exit_result =3D a =3D=3D 4 && b =3D=3D 5 && c =3D=3D 6 && ret =3D= =3D 15; + return 0; +} + +__u64 test3_entry_result =3D 0; +__u64 test3_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test4") +int BPF_PROG(test3, void *a, char b, int c, __u64 d, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test3_entry_result =3D a =3D=3D (void *)7 && b =3D=3D 8 && c =3D=3D 9 &&= d =3D=3D 10 && ret =3D=3D 0; + return 0; + } + + test3_exit_result =3D a =3D=3D (void *)7 && b =3D=3D 8 && c =3D=3D 9 && d= =3D=3D 10 && ret =3D=3D 34; + return 0; +} + +__u64 test4_entry_result =3D 0; +__u64 test4_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test5") +int BPF_PROG(test4, __u64 a, void *b, short c, int d, __u64 e, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test4_entry_result =3D a =3D=3D 11 && b =3D=3D (void *)12 && c =3D=3D 13= && d =3D=3D 14 && + e =3D=3D 15 && ret =3D=3D 0; + return 0; + } + + test4_exit_result =3D a =3D=3D 11 && b =3D=3D (void *)12 && c =3D=3D 13 &= & d =3D=3D 14 && + e =3D=3D 15 && ret =3D=3D 65; + return 0; +} + +__u64 test5_entry_result =3D 0; +__u64 test5_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test7") +int BPF_PROG(test5, struct bpf_fentry_test_t *arg, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + if (!arg) + test5_entry_result =3D ret =3D=3D 0; + return 0; + } + + if (!arg) + test5_exit_result =3D 1; + return 0; +} + --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pg1-f196.google.com (mail-pg1-f196.google.com [209.85.215.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 31B9D286A9 for ; Sat, 24 Jan 2026 03:33:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225591; cv=none; b=ss/PjxcBDpYrgIY2owuyp1ORakupsKi2sqPMf+UT09jTb3AavfsVd1gYJO+V4vze2SEu6jdAPBBmFESRqrsXKAe9qKOrbp+pqmYbHiySQ7BBXYXvgxXKcEt/8qNk85xxTWuUbi6aOKdXY3o983SQ5DnQEbygM84oDHjB5dcVzG4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225591; c=relaxed/simple; bh=hiIpT3trYm3UFeAi+Ivpk1TCrDPx1rTtI+5jR2LaH1o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VBG/k4vJW+Qv7arD2QOf0MHoGk9tAC3YlwSegYMqpc70TuST+x//T9Odxh+fDFUGBusbuD94UQdDc0NPjAV26bVubQRv4jODFMetoRMtTpHfd/nOKEdBBYYXyhoCu1hS7rGrmr2VrNYo4jxaoRfdRYQnNNq4ciAE9z8gWTPTUf0= 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=l7EoH3Xe; arc=none smtp.client-ip=209.85.215.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="l7EoH3Xe" Received: by mail-pg1-f196.google.com with SMTP id 41be03b00d2f7-c06cb8004e8so1055771a12.0 for ; Fri, 23 Jan 2026 19:33:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225590; x=1769830390; 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=sguImxus6ArC1Mtelx9uzhpdKAYVx6JRUGEnc74urEw=; b=l7EoH3XeR8u2n/jPQLVRF8V5OMoNT5YPvHsjivz565/15noL6EOR+3C3qMYTW9//tV +dKqHE6N9ZfhSMCfn07rjaLFHO09kEy0RUqlt8zpGLRk7FsGCmJac8bETSes9zLKKqZ6 Y+MHlT4IXt/6nNjQr9kIExam+LaBKm8PL3yAJs8P6WrbwlACsjhsc6jbueEr/3ic+wbL Wzzid8f/n2s4QxP/GTaZo1i/cUnW4BiNiPHl6CTVCFShs6kyZCbbZ5RbO95JvZ33AU14 ntcm27m1pu3VKxpB4M+d9IdCRRHwMf87NzGjJZwXKLAGZ/+t3X5wQWY+GmM78+9tfwge UMWA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225590; x=1769830390; 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=sguImxus6ArC1Mtelx9uzhpdKAYVx6JRUGEnc74urEw=; b=VxnHpyTnObP2OYHOZW8NW4ZzQGXXTg7uK1mbCdkHFO+nXDMMkPftHTNR6stvdfJQTu LSkPoAXoMA9eeH0qH7oGqdaDAdDeDXq+1Jpm431fEKw1P46rfYAE3d4a66F/8P79J6mZ iEg+5DniNl4eOIWVvRCLrYiIHJNICnng1zz6A4KtEUxJWp81ILB3QP7Cuhi42ImbOnOq DmXI5ERw2nE/e7DKk1vGXJmymXEEFxaCQ0qJoCdKxre7vk5U1qxSgy+mggUIZnxHV4we K4UlhpqAdjaOOtDBRSPyTule+wid1AojXeejrN2Vuth0qGdUm4DN6m4ny1blZRnR0lJh s90A== X-Forwarded-Encrypted: i=1; AJvYcCXrBD7fdVLMqpahLtXG7zzZ/8DtilmI5PTXmgmETZFWrZMfKqn1Z3vmLXjxB944nReTGr7Wa+8c7DYEyrc=@vger.kernel.org X-Gm-Message-State: AOJu0YwdzBiT0Iive/K2NS2moKFWAwkON/7U4unQK7iAHzX6TGBVycNM 7yX3Cw0OJNC+A/h2+WrDQHVmarVTRE5t7UzoGJw32a5oggVXjQ4hIX+M X-Gm-Gg: AZuq6aI6Nq0jVeJVwFOO0NtEfpCXMkjNpK+AjoQ+Y/phVFbA8kZKO7XZ61MYS9mXN7l 6R2JA+/+fttSofrdct8ejEh1ITicC5Q+oTD/aPRbKj1S8ynzenqnfRmVT1g8eM+DeT2NKVA9Eot qO4tAGWZ2nyMo0C7Wa481tsvecpuLaMm6AFhtJBy9SM78k5s6HvslCGR8C7izaVK6Rb7aV1oDDY FIGK8rVDoDDEsIHmAHEm58aGbjuFXHb8LqFVKj2FwoYb4GBa5Q90EEA5KubCU/GhYF9+mt35RZJ vp6dddJIQm6xU4OWw8xmcKLvkSwXv1evAiCekZFgrnNHNA/JJqRyclpg7F4Lrd9Gbj3kuD6d0Oa BHjGsz5IKlqZlaAWMov3Abma4T4dTXpRV3LUZGct3G1wFAcaYoXQ+sIUQt50pNh+c6gAtmqVOOf xu5GwKQzPg X-Received: by 2002:a17:903:2351:b0:2a7:5ed3:ba88 with SMTP id d9443c01a7336-2a7fe628b45mr51932365ad.29.1769225589577; Fri, 23 Jan 2026 19:33:09 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.33.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:33:09 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 11/13] selftests/bpf: test bpf_get_func_* for fsession Date: Sat, 24 Jan 2026 11:31:17 +0800 Message-ID: <20260124033119.28682-12-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-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 following bpf helper for fsession: bpf_get_func_arg() bpf_get_func_arg_cnt() bpf_get_func_ret() bpf_get_func_ip() Signed-off-by: Menglong Dong --- .../bpf/prog_tests/get_func_args_test.c | 1 + .../bpf/prog_tests/get_func_ip_test.c | 2 ++ .../selftests/bpf/progs/get_func_args_test.c | 31 ++++++++++++++++++- .../selftests/bpf/progs/get_func_ip_test.c | 14 +++++++++ 4 files changed, 47 insertions(+), 1 deletion(-) diff --git a/tools/testing/selftests/bpf/prog_tests/get_func_args_test.c b/= tools/testing/selftests/bpf/prog_tests/get_func_args_test.c index fadee95d3ae8..96b27de05524 100644 --- a/tools/testing/selftests/bpf/prog_tests/get_func_args_test.c +++ b/tools/testing/selftests/bpf/prog_tests/get_func_args_test.c @@ -41,6 +41,7 @@ void test_get_func_args_test(void) ASSERT_EQ(skel->bss->test4_result, 1, "test4_result"); ASSERT_EQ(skel->bss->test5_result, 1, "test5_result"); ASSERT_EQ(skel->bss->test6_result, 1, "test6_result"); + ASSERT_EQ(skel->bss->test7_result, 1, "test7_result"); =20 cleanup: get_func_args_test__destroy(skel); diff --git a/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c b/to= ols/testing/selftests/bpf/prog_tests/get_func_ip_test.c index c40242dfa8fb..7772a0f288d3 100644 --- a/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c +++ b/tools/testing/selftests/bpf/prog_tests/get_func_ip_test.c @@ -46,6 +46,8 @@ static void test_function_entry(void) ASSERT_EQ(skel->bss->test5_result, 1, "test5_result"); ASSERT_EQ(skel->bss->test7_result, 1, "test7_result"); ASSERT_EQ(skel->bss->test8_result, 1, "test8_result"); + ASSERT_EQ(skel->bss->test9_entry_result, 1, "test9_entry_result"); + ASSERT_EQ(skel->bss->test9_exit_result, 1, "test9_exit_result"); =20 cleanup: get_func_ip_test__destroy(skel); diff --git a/tools/testing/selftests/bpf/progs/get_func_args_test.c b/tools= /testing/selftests/bpf/progs/get_func_args_test.c index 5b7233afef05..8ecc5f339552 100644 --- a/tools/testing/selftests/bpf/progs/get_func_args_test.c +++ b/tools/testing/selftests/bpf/progs/get_func_args_test.c @@ -1,5 +1,5 @@ // SPDX-License-Identifier: GPL-2.0 -#include +#include #include #include #include @@ -165,3 +165,32 @@ int BPF_PROG(tp_test2) =20 return 0; } + +__u64 test7_result =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test7) +{ + __u64 cnt =3D bpf_get_func_arg_cnt(ctx); + __u64 a =3D 0, z =3D 0, ret =3D 0; + __s64 err; + + test7_result =3D cnt =3D=3D 1; + + /* valid arguments */ + err =3D bpf_get_func_arg(ctx, 0, &a); + test7_result &=3D err =3D=3D 0 && ((int) a =3D=3D 1); + + /* not valid argument */ + err =3D bpf_get_func_arg(ctx, 1, &z); + test7_result &=3D err =3D=3D -EINVAL; + + if (bpf_session_is_return(ctx)) { + err =3D bpf_get_func_ret(ctx, &ret); + test7_result &=3D err =3D=3D 0 && ret =3D=3D 2; + } else { + err =3D bpf_get_func_ret(ctx, &ret); + test7_result &=3D err =3D=3D 0 && ret =3D=3D 0; + } + + return 0; +} diff --git a/tools/testing/selftests/bpf/progs/get_func_ip_test.c b/tools/t= esting/selftests/bpf/progs/get_func_ip_test.c index 2011cacdeb18..bd7598a037cd 100644 --- a/tools/testing/selftests/bpf/progs/get_func_ip_test.c +++ b/tools/testing/selftests/bpf/progs/get_func_ip_test.c @@ -103,3 +103,17 @@ int BPF_URETPROBE(test8, int ret) test8_result =3D (const void *) addr =3D=3D (const void *) uprobe_trigger; return 0; } + +__u64 test9_exit_result =3D 0; +__u64 test9_entry_result =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test9, int a) +{ + __u64 addr =3D bpf_get_func_ip(ctx); + + if (bpf_session_is_return(ctx)) + test9_exit_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + else + test9_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + return 0; +} --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.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 146F61CAA79 for ; Sat, 24 Jan 2026 03:33:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225600; cv=none; b=tV6SPnhPuoPWcPAo4I6X54ijDcxwg2b6GZYpLcnQi5aA15Y2sGsEPe4AUd0nNYUI0hxCbaAoCjygmWM+vj8xPVs4pUp/eBsNuMOVBjGxu7T0VqG/AKOrVhjj1L5EaDqeqbrZxsx1ecCRgUOFnmnVS+c0cQl0+2yybCFyCYzExXA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225600; c=relaxed/simple; bh=MY0TzEwIF2cncGc4J2MGjes5OtwOQCXp+QMlMZ001rc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MvCyR+tNsVBEjrMJmYt5MKnkNZDTZGmR5fj175Z55qpMjiNsetGnMEeMtO0oEiTbMFfllknnQZXLrHaGTKSjEAAHkd3bXH9fSlkBCk761/yGEFDJSqPVbz0DZ0zl77HImH53HMrDDaJs2y+kYXOrnp+sqoCx1KH7VNzB83CU/Wg= 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=T2Ktq0i2; arc=none smtp.client-ip=209.85.214.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="T2Ktq0i2" Received: by mail-pl1-f195.google.com with SMTP id d9443c01a7336-2a7a23f5915so17898065ad.2 for ; Fri, 23 Jan 2026 19:33:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225598; x=1769830398; 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=ePFOCu4by0RV/ygPSJGiVD2r6LAEFSKblHnuNBvqT3M=; b=T2Ktq0i2acqqKiOMV8Kuo2CUC3O7L5j6ASCRSCDI+RxNv7a+BxckrcDGtH69cnUHi/ 2P8/kCWurwddyGxqpSW9FBXIGfc4e5Kpd9S6K7Rk6mOZSbsgAtioDDbirhMqvmc5Ws3D D3AMZ+z58quWI9Jvqtv5HDgoiiYJWkh5kfIVsgcB3O05GTRwjOG5+qrf7jr2+l/4lUEn SS/adGdDzZdYWCsZY01OsVSq2VL1Sy9LUD1DAsand1iuOG1pgGKL8XP69iQqjJuMcO7R 9YJjBRM3R2l5YE8iHu0GV/0zryinbitQMEyl+ojJTPscoUFjErLDffW8r1PUQM8w0N/N GjQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225598; x=1769830398; 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=ePFOCu4by0RV/ygPSJGiVD2r6LAEFSKblHnuNBvqT3M=; b=vb6rDqlbhnZf0Kf4b0unk7T60og0Jx/4YR6yUIdL+uJRNhd0oyWjX4nDG4rMauNBBk yMfeonNB94QcUOk7+xOUkSdnmQiZzd034ednp9kHOobaefGu/zSzhyJsEDdEgg+P5oqJ Me1WJRy8mNJif7JVOoCdu0rGhNns8Na1Z6Yk7ZOBE+6NP6czrD62dM2MdJfrS2QVkP9i 3ICKMsKlc48kXwkpBFgVhtae7wywxmGZiz9YTa/u/sL9m8mGaOG3IKdiVq8KVAHUxpil +B21DvokGnYbeDd+XOAN4D3D64ppuCwlk8zP5W0HxeA2ApOFmu2snDa5hqLRFDBzsG/k wN2g== X-Forwarded-Encrypted: i=1; AJvYcCXxqiu0msXrmwVjj0YwWELZmtpAVFPmVYfmUUnM2MTezIScO8icmyZk5xLw+UiJ87btO8LACLD3P7KvxNU=@vger.kernel.org X-Gm-Message-State: AOJu0YwQE832nsEweBSHPfAXCYsobEedJFx/UmVy90wqiNKESMgcNljA R5e2JDEUg7OGy9oVLK/fk3aULkt7wnq6S3HU0gAZpOKRMGj6sOCsZsGJ X-Gm-Gg: AZuq6aKB/QutmAdikTM85U+hGtOrl9cl2vu3NEtirXEd9DzEpSiOKFX7r7qZC3qjFf9 oEhQfuySElM0bBz3ohxO4KZ0dqqfTMITpvdO8Zdt+wQxvgCiC1AOfOizpgyYhT2qSs8EA9vqyH8 CldQiOafGJlvnXhnf44TiCy1rLm4+b7RABy7xtFxedypa4YRQpDCyqB1i0aMt/f8eAyYxSVyjUB qZ0ZXUhCdneVDD2TCohREN1tuTbLNRa5P3CwL8KpTWqLoy1ksJ1V3NQXORQzQ2XietqfC/U7RAV HPwe6wgRFnMv16wo4tPpZIsS9hxQKmmwhXVphwSnlyoUV8wzmPbdzHbp2CcRg5xN1GFNheBTHl9 Y898v5wUe8w7Yq3sTdJatkzCi0LsABUO934VlnY5YpPNUJ38wtmWh3SKmMPtObR7Ewbp8Vz/4OK FNpe33gENh X-Received: by 2002:a17:902:db0b:b0:295:20b8:e104 with SMTP id d9443c01a7336-2a80ec7fa5amr32307055ad.58.1769225598537; Fri, 23 Jan 2026 19:33:18 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.33.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:33:18 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 12/13] selftests/bpf: add testcases for fsession cookie Date: Sat, 24 Jan 2026 11:31:18 +0800 Message-ID: <20260124033119.28682-13-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-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. bpf_get_func_ip() will influence the layout of the session cookies, so we test the cookie in two case: with and without bpf_get_func_ip(). Signed-off-by: Menglong Dong --- v12: - add the case to test session cookie without bpf_get_func_ip() v11: - add "volatile" to the variable "cookie" v3: - restructure the testcase by combine the testcases for session cookie and get_func_ip into one patch --- .../selftests/bpf/prog_tests/fsession_test.c | 34 ++++++++++ .../selftests/bpf/progs/fsession_test.c | 66 +++++++++++++++++++ 2 files changed, 100 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/fsession_test.c b/tools= /testing/selftests/bpf/prog_tests/fsession_test.c index 75bb42942b67..0c4b428e1cee 100644 --- a/tools/testing/selftests/bpf/prog_tests/fsession_test.c +++ b/tools/testing/selftests/bpf/prog_tests/fsession_test.c @@ -77,6 +77,38 @@ 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; + + /* + * The test_fsession_basic() will test the session cookie with + * bpf_get_func_ip() case, so we need only check + * the cookie without bpf_get_func_ip() case here + */ + bpf_program__set_autoload(skel->progs.test6, false); + + err =3D fsession_test__load(skel); + if (!ASSERT_OK(err, "fsession_test__load")) + goto cleanup; + + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_attach")) + goto cleanup; + + skel->bss->test6_entry_result =3D 1; + skel->bss->test6_exit_result =3D 1; + + check_result(skel); +cleanup: + fsession_test__destroy(skel); +} + void test_fsession_test(void) { #if !defined(__x86_64__) @@ -87,4 +119,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 0e1b66b2dddc..211332bdcccb 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -95,3 +95,69 @@ int BPF_PROG(test5, struct bpf_fentry_test_t *arg, int r= et) return 0; } =20 +__u64 test6_entry_result =3D 0; +__u64 test6_exit_result =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test6, int a) +{ + __u64 addr =3D bpf_get_func_ip(ctx); + + if (bpf_session_is_return(ctx)) + test6_exit_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + else + test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + return 0; +} + +__u64 test7_entry_ok =3D 0; +__u64 test7_exit_ok =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test7, int a) +{ + volatile __u64 *cookie =3D bpf_session_cookie(ctx); + + if (!bpf_session_is_return(ctx)) { + *cookie =3D 0xAAAABBBBCCCCDDDDull; + test7_entry_ok =3D *cookie =3D=3D 0xAAAABBBBCCCCDDDDull; + return 0; + } + + test7_exit_ok =3D *cookie =3D=3D 0xAAAABBBBCCCCDDDDull; + return 0; +} + +__u64 test8_entry_ok =3D 0; +__u64 test8_exit_ok =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test8, int a) +{ + volatile __u64 *cookie =3D bpf_session_cookie(ctx); + + if (!bpf_session_is_return(ctx)) { + *cookie =3D 0x1111222233334444ull; + test8_entry_ok =3D *cookie =3D=3D 0x1111222233334444ull; + return 0; + } + + test8_exit_ok =3D *cookie =3D=3D 0x1111222233334444ull; + return 0; +} + +__u64 test9_entry_result =3D 0; +__u64 test9_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test9, int a, int ret) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + if (!bpf_session_is_return(ctx)) { + test9_entry_result =3D a =3D=3D 1 && ret =3D=3D 0; + *cookie =3D 0x123456ULL; + return 0; + } + + test9_exit_result =3D a =3D=3D 1 && ret =3D=3D 2 && *cookie =3D=3D 0x1234= 56ULL; + return 0; +} --=20 2.52.0 From nobody Sat Feb 7 08:45:33 2026 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.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 C7BB525DAEA for ; Sat, 24 Jan 2026 03:33:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225608; cv=none; b=gULvg8Vi14V2UVhvkVZTIjXwuTTchAT5wA0QakehJ6Ed0eHIEqhMO34rmeM9OIMGjd6rbxP/RIC2QtNgt+uEgTIWhzY5eomHL3PZcnP46SQ7XEp6T62H+TVUmJLddIKPk0mBvL0HHzMFmCY4kYEkE8YAo+PqEdsN+mXFV6iWvaA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769225608; c=relaxed/simple; bh=mSDxwBVD18PlqYhebUKPcoi11BSc/00xy3TAGxUREuQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=B/WDXnc7103VMF8McgAcl+g5RrncNET6fLYVs6i8BBVovpdziMbA9DKfdXuTrYhcFA7JaZ0gQJs8Y0cumhWFKHeZ5GVgPfoB7Bv776mATXXyafI+G8XcDEiJKQtVqxm78R0bmvQo2a8Plm4/3+uyw6RWzN9iWaykzq/SgzTkCI8= 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=GXqWxvSl; arc=none smtp.client-ip=209.85.214.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="GXqWxvSl" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2a7b47a5460so15948195ad.1 for ; Fri, 23 Jan 2026 19:33:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769225607; x=1769830407; 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=P6couASguPY6BXT1cGXkKjPK1OxE68MmNkjTJGExLgc=; b=GXqWxvSllPoUHku5fRetKn5YH8J2FiH6yyjYxkQXeL8E8gSQlfmRFIJqVAMdXyr99A gOSVXECcrsEB4IFRKXh2pRkBo/F7PRbdcqedpviG81S5U4qA8KB1G1ey8tinz6gLmMxV Uxzce1FTV6MRUi88xUCaangX8jr834zx0GxaEH0qJqwaXNH5ODwIoq6Ue+pvm2wch/QK 6Tl1kqcBvun4xDj4Z/ooQvbe3DJMj/A+zCC5YqcDAcNLAoVM/nnK7neyuajW9gL4F5ws WAQf+1QZx+M+x1hm6qq2jp3xoxI9yt8vwQnySLFz33QI11te17STam5BHYDY7jgDktif 98OQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769225607; x=1769830407; 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=P6couASguPY6BXT1cGXkKjPK1OxE68MmNkjTJGExLgc=; b=fire6SkDwH7xW7TrFczrYw2Ve/1k7G5wLE9PzbyeGmLWADXCnsQDYR2k0HIrjMyc49 svIDQUOxNRM1zwh+tEXJCx947nm78mJPi1HYDanF8lHn+nkRJS4isoEIOk5x3Y994NOc dsaH0ez1olI23tq0VbTTeThkZgSIq+eUCJUS9roTrsJFYjnwOF4qYEkPEW4jYM/MGeGK /Kmrtw0TW1RgJOSiIjhhZpWvC5gp+wY/ackRYo/B3K2/OhzyhumZ7X7UJsRZtZZRImVI IxLLQmqzjaw0NihZne/qiU8yvHJ1elTeomaFEAWQ3IkBeRVbEYO+GJ9oygx9Nh36ak6Y rJZQ== X-Forwarded-Encrypted: i=1; AJvYcCUCTeaTSpoo8Qgbf7FVSH8vc+z+L0q1MtpXGBLfbAOb8CqfP6r7hz59ihGqLWsbNsCUqSQf8rwUIFcT3bA=@vger.kernel.org X-Gm-Message-State: AOJu0Yyw/q3cP0PP510ttga/GHQhkQ32zB8GvJZFl1cEO2ajkQ69ePv7 qjDsiPsjluF6GIoQxr8rxRRVmDC2EXVn6Ptvg30MTjjJEL7IRzZ8Vo0q X-Gm-Gg: AZuq6aJ0F6AsBVIwzxZQLafjFeOCgv7MPjrhZBYe8vRUjFI/adtWtumZPWL+tA+P0oG WinwIjmEF6jDSqc03DG1LmQ14VeOg4Lx97a/tSqF/qZKEg2Wtn4vQujjGdBakJYbypnlC8v9fsJ sESidebEgsbOi0bcp8XOCRj7Ru9IhSMjMa8T+/gq1F7GgklD3Ohz+1p7K48vernmYY/nHPuurek gDqYvNBWSw/xbG8KoJSGV2RY4HZfTx63qK3AO2ierRlroNx2TEuzdi+yAQk5IHkOHVWKPEpUCIq 6+TRjPcTPGdXvHMShTb7cZeYLgxRH5r+TmIRu+s1F2LKw8xZIJ0frGmzF6ElrcPH4T+Fjpi/80n L0aJabDzcRnC4rF6WZGr2mcC27KYkYHi8Of8J5e3gVhGf/a+GCgTb0ZCeWgv3k7omGSdx6aX8yh LbjEQ4I865 X-Received: by 2002:a17:903:1b25:b0:298:45e5:54a4 with SMTP id d9443c01a7336-2a7fe73faafmr35282315ad.1.1769225607207; Fri, 23 Jan 2026 19:33:27 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a802dcddb0sm32539805ad.38.2026.01.23.19.33.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 19:33:26 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: ast@kernel.org, daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v12 13/13] selftests/bpf: test fsession mixed with fentry and fexit Date: Sat, 24 Jan 2026 11:31:19 +0800 Message-ID: <20260124033119.28682-14-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124033119.28682-1-dongml2@chinatelecom.cn> References: <20260124033119.28682-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 211332bdcccb..86e8a2fe467e 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -161,3 +161,19 @@ int BPF_PROG(test9, int a, int ret) test9_exit_result =3D a =3D=3D 1 && ret =3D=3D 2 && *cookie =3D=3D 0x1234= 56ULL; return 0; } + +__u64 test10_result =3D 0; +SEC("fexit/bpf_fentry_test1") +int BPF_PROG(test10, int a, int ret) +{ + test10_result =3D a =3D=3D 1 && ret =3D=3D 2; + return 0; +} + +__u64 test11_result =3D 0; +SEC("fentry/bpf_fentry_test1") +int BPF_PROG(test11, int a) +{ + test11_result =3D a =3D=3D 1; + return 0; +} --=20 2.52.0