From nobody Sat Feb 7 11:38:06 2026 Received: from mail-pj1-f67.google.com (mail-pj1-f67.google.com [209.85.216.67]) (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 D3B4F2580DE for ; Sat, 24 Jan 2026 06:20:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.67 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235633; cv=none; b=aURPPNlTdicQ7ll7bBFbvC1zpiEyUMwwgqcTXsb5voUABkHIQchcXGGnMsMZsdh4Q2Ritn2hmfDAngafOOvqwa9aDzoeChg3y+05SCbjxW5xcjsRorLD/sImLu5FcI7j65H08vLMgkfq/Fp8n6yCW884FEjByFB8/8JPG5LEJmY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235633; c=relaxed/simple; bh=wwBM4KNzRljNZStnUWhG7h/qOqs25RK0YzU3W4PEVTo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g4+0NlET+oxxxhT/8efDYhJZp68JXJqKKXW+GEJ7QGDJZknVxKlUOhxZ24ZdwhbBuXEccvKdPx34+8KelrrrI/9AOj8xii+WDxS+uNk3ISFFvwZS+EEvbOWHvbf2iIktumnHCeVu9bFYpieg6w7q7cr+q9T9g63Qp5PFf44cXb8= 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=LPOGpSqp; arc=none smtp.client-ip=209.85.216.67 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="LPOGpSqp" Received: by mail-pj1-f67.google.com with SMTP id 98e67ed59e1d1-34c708702dfso1678581a91.1 for ; Fri, 23 Jan 2026 22:20:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235631; x=1769840431; 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=LPOGpSqpo7911czCctV7dSiClXyrkrlVuCUp140h1SWlRRkJVQxM213niQppQwffxp ajRXfO+Np1kF7tIhozjjYm0QN61TRS1Zi3nGYoEzHIwIoui9mdueBw/G9KkBiK1uqEK9 UoE9qWTuCNpr5Je6ywfU3YBLptmSE1lIx7KFUdFDEnesGqIaDtz/JYLMKC/FRxUftsM6 x19Th3ob1+B6qwJT0SI2j7FG5sRjuRmdPe1jj/ajZHUSRr9SzDYnKKu+hjiUPvYw26Uh YkD515KCnWjfxKwzb/MyO4Kn92jXQvrqUUiWhXZGzlXPfMADx44zUwvC6qwlWmEzxLiW mQrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235631; x=1769840431; 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=mYIYVErz5v+GK0KRCyEKqVaHT5YrNzHCySo3z3LOFVhI5op2+dPRL6RQSb7kaqsod5 cWPpIfNL/rWip+G8tYXlxpSjGuxUD+easc3sP26E3UXFmAJ5FK6zP+VoCCKzTq6fiYXG njb2aTCOK0UmaACR2iKlKyHHh1ktonHJRBnQ/9h2yzvwPplkzN0Arbu3KhP121CCNY3l xIGi4Ja1GYuC49IiEef/YcLVZNPly987wnbFx8lCbC5LSVw6EU1va8v+IbPHqVM41//2 0mAHNEuPgYemHKuYKJhobPVo8Lz1qbqDZZHoTye/2FOTzhdDhw2fF4INvUl+VN0ZEkQX 2uIg== X-Forwarded-Encrypted: i=1; AJvYcCX3gOrcC/N7aVogaEF0/JrLYY8u059qRWHAuER2PVBwUOMY1PVKVfMXTXUhb9hgUQUUELOQPVlf6zatqrQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yz2iz3Wh1csK7x5hZ+lfcpYx3RsrEaHNfh+ke9sCIzHt9femelz hHqZyecViEmhDmZq0JWiDrMIbq9rcJ1IJeQtqE8SObbBwwZTZT4vSyIf X-Gm-Gg: AZuq6aJ5BG6lQqapt6Ips+xdd6ogqjR6S7XKpbBjy99Bklb5ugSuGxCMM9YhAgYrkou mrFCIvTy4OJtYUxiXUYTC8FRVkZbNUMa7bFivQnuxsvulla0B59APyN1Xx/Cx+jsJFqW6R9gOq2 LQbzkZCI4sthjkss/ARV483xjtQzOCkaGZN5ARjVmMq0fGmvRyxQIy/hTTBeQpRDFm1LFtl5eq5 HDDiLnmD4NMvaDdaXi844uCOFy8T+QTdZM7z7yAeDimk66e7xL6PhZJvGVPPv0DUDQje1PsbCHh ahUPvSbGMqPSnayOzKinSk9yVnrGOfN/F3XH9LDhyMH4jfgaUKSYcew/wvuKfZTmVl0wnsbfKH5 g5hgUrjLSKFkGvyntfuI1j3SgRyiI5/fSbceNwZszFpDIcF2uHmSMeFgnoShbOqlDj1fvQ0YHn6 eerDxChaRq X-Received: by 2002:a17:90b:1f88:b0:353:5c16:aa7 with SMTP id 98e67ed59e1d1-3536894f763mr4442765a91.25.1769235631049; Fri, 23 Jan 2026 22:20:31 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.20.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:20:30 -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 v13 01/13] bpf: add fsession support Date: Sat, 24 Jan 2026 14:19:56 +0800 Message-ID: <20260124062008.8657-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 2026 Received: from mail-pj1-f67.google.com (mail-pj1-f67.google.com [209.85.216.67]) (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 856E8242D78 for ; Sat, 24 Jan 2026 06:20:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.67 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235641; cv=none; b=jkIwnJ9MfwlmfVzrgaNURnSuyqpliQmFRhOrqaiTYDe3fPZZgqe/Ha6nUX8gHhVeQJ6uG9t86ucIZhG08IuQxSD1LlT61UOsOx+FlB14ByrmjJZeQIKKMAXn7uN6JxG0avF66dLttYrfrj551V6qtAyUkR7tLVijK22iFsnbCt4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235641; c=relaxed/simple; bh=ov0wUqV6kuTWTFBkzZscv2aYec7op/sl0bS8tbqxj1s=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XHtj7rLvbz/+jlv2NZtNEAeE9y2Y1xrnz8GanulxZNdFOvyNa8fPSAJdVwQx9TBuixgdyZN8z7Pxxn8K5pxDtzlguxcVWh0xNHDCePvW9KPRvMO55I8S5G4VoIMC7FQmHofSchFpppclNq7ozkcXzFM/pgW1l0NuEK8jCkyyRWw= 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=UyzdCAzj; arc=none smtp.client-ip=209.85.216.67 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="UyzdCAzj" Received: by mail-pj1-f67.google.com with SMTP id 98e67ed59e1d1-34e730f5fefso2029692a91.0 for ; Fri, 23 Jan 2026 22:20:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235640; x=1769840440; 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=UyzdCAzj0iKtR/p/hphPWxGCi4BL3lBeeYrrpM1Ix8yfVD50FvuuqEFgqJCCYLiwSY ENkfU0/Ksl8dup8QhW6Rkb0il1gsMKIymv3vyEk+1aAp1iRy5ENHO+7okLMVpEG2+/P7 kUH0rFR4q/d/JGqfguqJvUb0nQHJwf0XNE/+wDScWfAHbzTOeWAKX4dBwVS6ECAx8sKj sw/VrtjjYXM9hWkOJOcldahOsH9mywf8vPCHwn/sAqCFlOVNChBa7bxCSpd8VOwDKLjc jduN3V7a76RDVxQXgFg+AXdhQFR/rD9BckmOHSTZmUQaqXc83oeCUUwAr8pusUYm2LB0 hZaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235640; x=1769840440; 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=Z0rn+ccU8/D0ekkHR9vosbHPBzqdIZKLCyUD6Ig6gtpFBFjb0q7IR2NrhoHWOBBswH gTrBolf2dMR9XLlvll0Mw7U3ngFHqDW0xJwZHi9ENFeLcq4FnMekh3YkpnOB0XgGpGU7 0AQQXHyZdPxZRRXe6FbbevNI7kgjpBI09/nJmnrc2ZLq7QFPlESzxGkvqZPoRDrDLPLu EgP0Mn8wFIKWCxRj1U8qTZx6kGx7kEWohOBVqh51FiOw5eILDGung9Z0rykykZqb1FFV +aEALycDzYdN5JCGCkuHme+rdCE7p4cGNz2qa8ol/1SZZWVSQXBFfByE38bWtCm0UUe3 I10Q== X-Forwarded-Encrypted: i=1; AJvYcCWGgov3PFe78XiNgNAr9yqPTQ5DgXsXB9xSoPN4wBIGTIXLBvC7kym7341FN5TWKjWaK914xemtRZ9+Pvs=@vger.kernel.org X-Gm-Message-State: AOJu0YxR+EiwF8BvDPdmhlAHk4gdqduibA5JlAucNm9FyxInCkm2HDAo bDd3WW5qfV/r+kmAttl8G9/Okjp/ele3nctFt13kcwu2cRfTS7jEgiyQ X-Gm-Gg: AZuq6aJ99u6tbIZxwEWHFrmC85VdI5a7ijd/s7V4gj1VL5TPmE45HgMSk5dMzu9dlzb 9qA8Qa801XkHNPuMj5wZgTNUrfGSEhIRY9KpoqjoUQAcRxjn5VVDSfXukReI3gucDujIBuo8EDo xTPH/Xqh6jHH7rjRI+bYz8sAw9ZuS3ooRJ8hjObVO0Fq0YXftg1bk4iafNWY6hfg4C78YYTQID2 rXcpUAwixzLoiMwCobLjRUF2rav9RtPGBhWZGt5gHcryGlQqoLejUOU9Xo7P4F4ksMB/YUp6XLQ h86UDO3mujVPHuxIJaaQQUgzls2/5p8GsxZMKTwNjGYQrRhR4sWZe1pwwDAc/bpjaHvQj9z/MGx wXLTMNHnWE/x2l3ZZiv5NDeaw1iF986wbyMp8TJ+yxb7R+SnXXy0dFwrJzw0cD+RKCaF7GGmpt+ DATy8zy937 X-Received: by 2002:a17:90a:e7d2:b0:32b:65e6:ec48 with SMTP id 98e67ed59e1d1-3536700d6d2mr4331296a91.8.1769235639598; Fri, 23 Jan 2026 22:20:39 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.20.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:20:39 -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 v13 02/13] bpf: use the least significant byte for the nr_args in trampoline Date: Sat, 24 Jan 2026 14:19:57 +0800 Message-ID: <20260124062008.8657-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 2026 Received: from mail-pf1-f194.google.com (mail-pf1-f194.google.com [209.85.210.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DFC75242D78 for ; Sat, 24 Jan 2026 06:20:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235650; cv=none; b=PBVlY9KC5L8BQB+/TuTjj832GrO8lFPnvihpbY51pLkyykxDLVXZZhXo91hBvg6SE1P3OBUSd3vtxqYyr8tO2AG0MNIUb3dsTJleJOl1S8gWpEa5jjlzRff756JPxjyQ4bYw24Bggbe4C1+672WyJJyJ+lnmxOa+90sWxl9+UTo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235650; c=relaxed/simple; bh=D1aO+oqWTqVbI7neF6MggHiTAyqchYMiNo/15B60NDM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ayh3LD/Z7CqKCKIx2ppBfL/KclR18a8CfAWZFH77uzoO9LdaKqHKbq0ZXCWcrqOK5BY/9bW5J/55ydXgxUZ2gYp2aY2vEuinhAO6e7uwfVqcbFE9dHPtocWmzzFWcnBxc/R5nrlwBpa2caV+R1PvvumPNO7/glpifypwCnH/MxM= 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=Q9UJMk+Q; arc=none smtp.client-ip=209.85.210.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Q9UJMk+Q" Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-823210d1d8eso582992b3a.1 for ; Fri, 23 Jan 2026 22:20:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235648; x=1769840448; 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=Q9UJMk+QyFdM54HgvqwWDamoSXUDXZnYw3PaeM5x7vzv28lWtEATH2PdM5/W7jgv8s OuHL2dQ0NIYPSjNJaki+F2grin9wE/Emh60sAcPqBb0ej4r5Kl+reZonmDwJG0WNmdXm cR3v1TXBDNGDQe+JktQVsU7oVpoBqohtUgz718pTwOcORfYdhicGh9wqZl2cxqXcndfX jfC+FyLE0ewroacOytTyCv2bTXRXFvrRNRhCMRH4IH75bcWozCfSjGyFsePFcKFo/GXI Gfc7MVH7L/X4VDhmL9Trsb62Ug+WHErrVatlHEFywWCEWXDIIsv+DLcjzmr0gvxBt95z 2uMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235648; x=1769840448; 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=eVmR2rzkF7JzRrny6tZSBUPUskPbDLb8thaPfjNb1lqkk481nfFFKcW+ZQGzNBLgS+ b2SUUcsLOIGi9Z34V5t0Gz69eY+UhZfyfFZ8exuZGiKGU2oPDYm7cKTFwoEaiBQf4Pud KzkE/YFzhAzpWOKR/UUNBswOS5L87AiDuURt0xYMf6tQmeO8aXtl7JSnY72qo5YUncHv hfC9IKpz0jNRI+cTG/1iipnLe4JJOC+dRwYYJriDncxH16Bs9c94+ZP7kslAEwM/LQza iW2INz/vMusFxLxYgvcG8VXdSbwIe1nEkvs1H55+zh8PhlO/3LybWjnglYJ56yhR5WLE EF8g== X-Forwarded-Encrypted: i=1; AJvYcCV6dXPIIgsztnul9INvKFVLd6dxdevNTX8/E3yQSqbKVI7Oeq2nvhfkJuAoI8j2rV6KDPgxyOpEQwuq2Ug=@vger.kernel.org X-Gm-Message-State: AOJu0Yx5aXkNFcK8rhuxYduLWwwlKENJ4l2aQCWeSkDsvd9HzubMgZt4 SMt91DUkPqFIgscGp83R2BUm6YKOykkaf+j0PHfX8wRw7+4IvpNm9wcF X-Gm-Gg: AZuq6aKg8CWnNnCb38+CNyBtXOeRQzs9cdykyZDhcWAKAntcrisBQgakZJJf8khW4hX Qit/9RbyyiI27QljmlIiM/cbxwcYl3qRcImoQIZFPzhS5VkN5uB8cFfFZKwCXprc/kI4DIXCKKc BQZSIbcpHQhAMTMkRn1ar6i1J/3ZlR5KFJGdI5Ou2WR9hnurC4ZImJYrHLYecEQ349R8FSg2ZKD 3Zk2lLXxeHTt/2QsK7rOpGvu/mznIBbTEtV16MxRRz32UKx/cMUC9Njx/ihJ+W+lYt8zzKW/lK6 wzkZlCijIFWIbm81+ne2p8zuijswUDLMazgKKU2wKhcuy01zafCN3y3xMShxRbZPYYLc7cVPr1P jo0pVaQ8SctnPhSF+1MZpf7zCPoD+qWRhE4uC87L5sjXWib4vCp79/wKL+Ph4vB+JNxnzGw9gzX CZtMDMBHfF X-Received: by 2002:a05:6a21:7a4a:b0:366:14ac:8c75 with SMTP id adf61e73a8af0-38e6f863065mr5199794637.75.1769235648305; Fri, 23 Jan 2026 22:20:48 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.20.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:20:47 -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 v13 03/13] bpf: change prototype of bpf_session_{cookie,is_return} Date: Sat, 24 Jan 2026 14:19:58 +0800 Message-ID: <20260124062008.8657-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 2026 Received: from mail-pj1-f66.google.com (mail-pj1-f66.google.com [209.85.216.66]) (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 1DAAB14EC73 for ; Sat, 24 Jan 2026 06:20:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235659; cv=none; b=dWObxSKvqgB9I1bEqyxSseLXqrVGQJPEIB9XNZP2JADlp42Y+cZhxUdQpCoro05KYSyD1/2ifsVVX+llVYQvw5j4wv70y+Zbl0aUmx9jzNfA3Ql/7VxS2Sx9kuO+M8zuFD7VVzDUrSL+zB90FE2Jc+Px9NLGyrq5Tkmt+LBPwHY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235659; c=relaxed/simple; bh=K9b/t9XXOnTLdqEXsxRrneyFY/nndVnsOJwQPHo9UMg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iq3P4Qaog6a06dN3/FcBj0bukggjxFFJ4DFCG4ibQ5EUa6sfKYH/XokLa39d0lGoFHtUjGHZshs39nNXD/+WXfQ27ERoT8uPVGy5cIC37eOb+lYkuIX2J/f0k1NS5qh/yUDYq0E4KsD2KO6TN5z07bbtZ/6+75KzHdiIrKzC2co= 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=gpUgRNGu; arc=none smtp.client-ip=209.85.216.66 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="gpUgRNGu" Received: by mail-pj1-f66.google.com with SMTP id 98e67ed59e1d1-352ccc61658so1339067a91.0 for ; Fri, 23 Jan 2026 22:20:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235657; x=1769840457; 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=gpUgRNGuQXt3ZKxIY9oNw/iXv06/d/Zd9CKMYw865VEJKxuRRLgNk9BKzHfdozKfH6 4S+t7O5Y3Ult/KTWFzJlUFQHHTn3a3SIs0gqH5F9ueYZ214qlYg7ikxVb96UiEOO/R++ 3bBKM9DsWFiw1qFIAM++EzzsY3uDJy7bpK+JylEHk5iIv+0wtWY+CFssYgdkyDMy0Tpd IWkRQHBkuDOuNNB8O/HIxRYkSwldg+861NTDEQHJfjUUtddw7zIlE1jc004JSDQawuhN eMCOjMGoTg0x6INGmzMEa3Mv58EaKVlPntqkhuaTJrCp2+LIkGHYddZrZeE9qdE+UcMj Qykg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235657; x=1769840457; 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=gOj35kx5GqQ6A3IM2CKldFoOd6pVpvfTQGseypZPsHfLmS2rmvCLK3tSQBzvS3YzP/ KuL+I81UoDbuPm6i5wiMqUERVavPL9cvR7aW1SW25frL/YyORm41PoFXss0f1Lnxp1gW 8TwyS/3T8GVUcOdMh8umtZhztigVSB9LrZqGe28UQMjw1K1NqQQbu3Z+LGfpnNebL10E QLUn1IUvL5uv0eYpftx6dvf/OdJSWBc0wvsfjmL8iL3XXIs708r3YZxdLJ3W5ZEqjpAt hVnwj6tBchBN2H/bq9zWNIMKKw7E6GYHWClJK+dumj2CrLE++m1RrDTVjjREZwXiDYBD ubMQ== X-Forwarded-Encrypted: i=1; AJvYcCW8bBptI/gx808PhUewpy+qZ94/UmIKSyGlTG4XpGmhbASkxrDaTdq/LyEtI7UjJnP6TItCW1XBkGDjjcY=@vger.kernel.org X-Gm-Message-State: AOJu0YxYTWJaU5+OA7ZkffmCERWL/oZ0RqOHkoNXIEaCZ/ue8AFAunS8 cGY3Zzq5hOvJENlkRR1GYu5x1k5SohYeycDLzLWfROAMlV03Qsabihlx X-Gm-Gg: AZuq6aIrEF4tl2d/7CuGymvZZ7xW2kHbuWYxFgEzchzf8VuAdkgYes8L7KFwGHSHQwy MiF8bvR34OdI59vQ+UjmzKRHNrXJPrmlspRuH8+VnEdvLVA95AoTU3eSrW2qYEYeQQR+1E3LiOI eWshgP6a2KXaJft9d2BjFpg37nfWpiVdC/xzwnAquITMPSSgtwu5CfjNA+yEECoaoyVlvc2HmGC oKn1D7O7bJp1DD0cHNfmJrlzGzeNaIqpkIWJ4MJAiB9PZR79S/Ufd5ShkjcpxADH33+gYcgY36u oKkOOjpWyGoiqJWuEWHpb4+RoNo7J6rE5pGxg/ZnBYvm3z+BzyRb5ofJ2nZZxtX4QFuz9SnWukd P5kobYoUOhyjOlhUVOriIiq2nceFFiO5uqjUpo+wvw1YTwVxA8YkdwolhonrjGk5CDU3hRr+gON r4WpbSCDtxjEKeYtdamIk= X-Received: by 2002:a17:90a:c110:b0:340:e4fb:130b with SMTP id 98e67ed59e1d1-3537955a310mr3049399a91.14.1769235657375; Fri, 23 Jan 2026 22:20:57 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.20.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:20:57 -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 v13 04/13] bpf: support fsession for bpf_session_is_return Date: Sat, 24 Jan 2026 14:19:59 +0800 Message-ID: <20260124062008.8657-5-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 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 D2E4126E719 for ; Sat, 24 Jan 2026 06:21:06 +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=1769235668; cv=none; b=ccIXE4ydGz0nZJZ6AOl7hzAk4ilde2WvDBMgdil31/URpSwf0Mic3fPn31YlVqyuOJrBmR0tligCiKufiY2FbZ+GpOOF9a7/R1ekjxpxR1aMTqoTZj7+dSqMMS5IVUVlJM6V4GM7q6kYlhP4g6Rv70kASfVJ1FE07dJ+hw4Eqtk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235668; c=relaxed/simple; bh=kjcr3U+Eej2jkvLdErMnd6YR7FAn98KttpJB/4PZM7c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=SOfhOFXXknJOj3F6SVazy3+qpVR7atQIC3u8WATlZL/vHTXZRC4L9qm4sa6Mxf84zufNk0E/w7MbAFlFFcTjzS3tpjSWHfjjrOSa7vorwieuLnRtQXqcgiXuSa2/w9Zjr2EzEMi9I1XtNVXNJYEwoPlH7g9zr4heAeGXBUbeFRM= 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=YUIsKtpn; 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="YUIsKtpn" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2a7a9b8ed69so32665145ad.2 for ; Fri, 23 Jan 2026 22:21:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235666; x=1769840466; 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=YUIsKtpnltVxgATzRFvFwDTjGamy3m4CrBUo03J/TfZ5HtM1RVIAJuvOtK4JOtldyF i2J5erBEAnJmrBqftfteGjqM2lu0Kyu/V/r2wD0cRPn9qPC3s1bvioivDd0NKYq7o5oS jAB1mzh+w783RDSIzgQydnFBQ9GmbkkcbSk6H3K8zpV7q9F5TFHRqjHoCLSKenG/hg+9 k2h27c91rSjx5tOXVjTj19ChIaqclBTKWcGycH56ouLZtiXMqkpHONsdFKkQEV7dbUx4 O4HZMhmepH8Eodvl39m6qOh40OV+NlmOX6oAnv6mmvlbDw/JFlIJ9AE/PiZA/B5OaM6p qUXA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235666; x=1769840466; 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=svplZWDOT9IGHP5WoMhKxYrIzyvIvpnI3hLlDlL9LJ+PztmoL/XP3WDi8PqUd3kGbG vKXppb4qkZ5LHls67sRXdlgxWyolnKHvHi7nGNIazoZnaxxTFnQkVeIvjrGFaqbKoPgu 4gvghK7ltReQJamegNfelZ9zGINDrbONYkXIIGxFO1U9WQXHvsmwtNdztir71f5a0Wd+ 2uMETUi4RFuQBkaoyxDdgVDewRUxf9ywcN+3cCIU+AfWud/rlw9ZmczieugcVQwQ4vLc 5HxZzYf/KSOHFbw2T0qPPReLqD7HFb0skXduFnLW7u1sGnzbrwMhyPAeFq7qhyTKmxaA Iz/A== X-Forwarded-Encrypted: i=1; AJvYcCXSPTEpOjaJpUqmsaKQFbtT2U7j+WCWxrfVk+80q4TWIDyHdc2KB/X+r1iAPna7nNVO4sgr7nVbdJZkJSo=@vger.kernel.org X-Gm-Message-State: AOJu0YxVrl9q8gKE2lg3Gbd6SrNFFB4Hn+Fpoo8VjT3YLjlWTpPrH6IM DyUCUaBsJ6mMV9uDF08DR4JGhVoBAhGrVL25RlVuSKULZNFusz7mqlIy X-Gm-Gg: AZuq6aIM5+Vd/4ccfFsc5f808X/s0HxUpC13dNs99fGPHWlpBmTlIEn2mrSy5JOdzFF gNeT1Fz2VYRQiX3K3tp2nsC1S3OenBoHPudh4/0y9nWiFNqeFplpwAaxjweUq+d3C/W1RDGEI1a aJQhVpPfERHjo3vBrlqNoBocfDs+4ufJX9eXByEl5A/PFVGJoSwXqW0NuVtiGJqlvcZyLkPEOs8 G05u5p/N3qff9TAUxOeoQFunpPbPS5/rBm/bwYBPnHIv1+tatfJ9bCGEswNxb3BSodh2NQsgAAa yaAeaGBmW+sq6+bC2jz+q4c/XF3R1ieU85jnRDi1phxkLvkjQG4HpF3Y2P9zXN4jc0OO652Axg+ wceR5I8mvX0AGjhJt3VYUsk656S9Tnbiuzsj229n5b9itZjPomuRji5FMHGQ74oxEf4CKvl/9BW DY2PktdspI X-Received: by 2002:a17:902:f54f:b0:2a7:3daa:5822 with SMTP id d9443c01a7336-2a7fe77dd97mr45112005ad.60.1769235666125; Fri, 23 Jan 2026 22:21:06 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.20.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:21:05 -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 v13 05/13] bpf: support fsession for bpf_session_cookie Date: Sat, 24 Jan 2026 14:20:00 +0800 Message-ID: <20260124062008.8657-6-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 2026 Received: from mail-pj1-f68.google.com (mail-pj1-f68.google.com [209.85.216.68]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C7229269B01 for ; Sat, 24 Jan 2026 06:21:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.68 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235677; cv=none; b=ptLy70IJHrCQr0MMLIt0ck8hdzozg/xv0qPothgjUt5wRrXO6Emzr9Hx5TdnrmOMt32lw62VxcCElKMEOJ/43BY91oKcCRDwmYruqANaklncvjkvem2Xwcs956mub7tahr7bh8v9zo2eJFiphvE8LYAgscmIZY5WJIPZnpdY++I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235677; c=relaxed/simple; bh=6fOLPr5pZFj/RQ+K6yXNXzxNF1aapP52tKW6Swnvtbk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Y6MhsX1KGUjkrSnI0GnczR2zH9WqocPMHCD9q4uT+9AAtiEtAZB6BZsdNnedbPmRGAlXTXb9KYhOAxoEjzibJ3z2PKZRGx4qtxoG7I/eGcUUFOwB2+p1TnRlttGJfFuR9KJKtqbQMaS7WcvUIMdcDfxC4WuJF6xpLy+GyugpPXU= 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=GAnOG9jN; arc=none smtp.client-ip=209.85.216.68 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="GAnOG9jN" Received: by mail-pj1-f68.google.com with SMTP id 98e67ed59e1d1-34f634dbfd6so2449103a91.2 for ; Fri, 23 Jan 2026 22:21:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235675; x=1769840475; 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=GAnOG9jNJ2TOgwjjI475jP2tsUk1AIN1smo/Qyx34s+JXA9DgjvdBcYZZzZlssUDrx mvE5RIwQkVQhRXtkKdOZ/wR0s+8/TDJ/u8odXMpIuJX15/9gb+g7xu1cCUbgzgmQhaT7 jF+9mLVLsyoHDe88oIdhOW01CsG5Kev8REsm5ZZyJVeGWsvQ8vp3AhLe6x2zX5jjpgPi 2kg7RfNdPxxOVa2XsAMcRoO9LzgPmkUG3r3niNphoRSHHtqypgKT4aljQRxm2N7WqOaG 6/xDkQ1VFR+D7PO40wHhmFC3SPI7Npd81Rlk4nnM1fD7N9HCbdag8hAbbftldrNm9YwD RAYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235675; x=1769840475; 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=Vn8LeFa8td7JaJylXOWbjdP/yPkcO2atPwV0I/wBdd4uuhEKBdeFcFz59ZT2qIWKDg CfLskx+XGckppuL15glGvZqnCi/ighijxQ1JeWjreW3vTgtlQ/jFmwaQ6qaVCCUiksAw m1Oe9PODG1zxUJ94xzJxkpAHTa26xBox6cX1qlDYWOIPljg9AdV748I5y/umVLh3AfTl rSqX2EmMwe27DtgITZDiz9oKztqJqTBVgxZc6+x4Qm3FrbGJDtTeSZdwRaWw3wuoUQmh rpX1liakDD5D2OmCzn2ZkU7odSRCCFJrhJz0HXvaF2Ct/bdD1b2Jlx+5VaJBE2+8HTRk CnCA== X-Forwarded-Encrypted: i=1; AJvYcCXAsw+2afJxRosqYgGuDhnmsOw7ibJbOVIrvILJo/GoXosL/axlHGjLfXi88XgVBEAnbvtjVMCSz3ufSUE=@vger.kernel.org X-Gm-Message-State: AOJu0YynbY28LQzg0WzBZ2YVt0bPHbGxkpxP351Z2IstPp+NMrZ1LWOb 63/V1VjboRvZK6i6Josjm0Hc4NJ4R9G9lXGOSvfrwXDnzaG50C+0O8tNbDieXffH X-Gm-Gg: AZuq6aKbbbPMAwRCxpsit7SvYnj5KbX09ZISG0hAWIsVecxuXt0hK9R9Yq4P0c2K0Eo DfMRRnKYIKidaPfSoCPZTbZZmy0VrK4JoTIp9rar/CG97EuEW5AXdBBb1cy+2VXYEzVlZSN0m5s qCXuZxEEHRjmO0/OmUArFyXJ4ntSebayiNneS/uR9touCCcK4OY/iaB6hoZzbwIsx7rBnX2p7WO gaOYSPjazQB1JjliLp9vwbF3tCVq4zy4tuhaMnV5IC4LgutYsQmL3dXifpYppzFzHH/u6ofLXM8 kDZq7PoJz61LJuHD40EQ3dX3VI4lw/5hIWVi+Wm9NUJUuSHsfpofh1lL+4af6ifT30owPKL9Spr vrxGt2yy9eN9eUYUa5nOEWyPw4yhDRA90s/Q+Et+8Iok9N27egdpQmuIWPTUxrmY0cUjPJyQRTY 2+mAX4haZd X-Received: by 2002:a17:90b:4c4b:b0:34e:5aa2:cf61 with SMTP id 98e67ed59e1d1-35368c436e7mr4201938a91.28.1769235675250; Fri, 23 Jan 2026 22:21:15 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.21.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:21:14 -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 v13 06/13] bpf,x86: introduce emit_store_stack_imm64() for trampoline Date: Sat, 24 Jan 2026 14:20:01 +0800 Message-ID: <20260124062008.8657-7-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 2026 Received: from mail-pg1-f194.google.com (mail-pg1-f194.google.com [209.85.215.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 A6A5D27B359 for ; Sat, 24 Jan 2026 06:21:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.215.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235686; cv=none; b=C4YPhN2dEucYvpxGg4tL3U0u1zDpHU2dyAHYYuX3Ur6VMf/S1gM3jJ+B2VG2xmsULX+nqgL83Ev1ULhNJaYFEmDrNE0ePySC+1xGoLqdKY2/QIZNTSiuABoEAinIukpdhLycp/skDl5u3SA+mi9fJzVWh+g1Grpnbkf8l8siuSc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235686; c=relaxed/simple; bh=EjnGJ2RP/1JCMlZMGRd+YlmPnDkDXdlwIR1/R/iLIq0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AW7LTWrQnR06sH5KXlIxQcmMt39hmg3qXacFq+z9w2WmNP8T+k7InRiOLj7FbSXsC8tjkHS/eRo48cTSd54hfD0gy2XWfLKZasqhjNiUgy8ZJ8H9RM6o0Dpp319p04Q+yi23CI7KCgJmclq615mCjphNzzbBoxprpYSX37DS9ew= 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=J9AfUlqG; arc=none smtp.client-ip=209.85.215.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="J9AfUlqG" Received: by mail-pg1-f194.google.com with SMTP id 41be03b00d2f7-c06cb8004e8so1085553a12.0 for ; Fri, 23 Jan 2026 22:21:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235684; x=1769840484; 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=J9AfUlqGapkafb6DnWCLl9AYfCDHXitdfIGFhHP1lvLhOA5izbVNp2ETNCUgqSzYb7 IVwYIpcpmYRF6+KW8t4gDXyJ3Ko8kybz87TQGcwqu2COv8Qs+y9FcO562NXsreYukUrH 2oTqQnAunKW8+weBx67nC9avAFwgeSr83U5XfEb0Ti50aLU7Ms7kery7/yEh6lRAImGk ATbayV/XJIlgqEgasSzGzrSb7HJnI46oq0hbx2hQkhj9eOSGth8p8SCKp30uU8sfqUlS tDHZOkF3TKl9xNUjnmjn0r/g/epT32NZ8KrpSMZ4U/C1Nv/wggYiSAn/msmrffFPmGP4 46Vg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235684; x=1769840484; 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=UxGku5J/FVEmagPTBsIT/HmLLGOzvZ2bxmP6js9Sv8k4TaUpntjtYVZHWl+cqNf8+l hprC8Zcnmdo/ogzf7QEQr7EIz1SYDgrHQPDVyvkYmoSN72N9DOSs7mQWON/BNnaV1S4z kP/bNxfWHMaq6LkBTVntRaF0vQPpKd2s3zzCu7zho+53Vz36EE/QKEh5NP5IFEDj5pwn 0/zJylT3j2lChDmL+zlD9PRhlfn5LwhOOr5/XMSGe5RWbFluyFk8cQ5IybfHlVWCLHwr 1cD7QuLVHcc7RlnkqfYCXL1rigamw7iIesw/8T6AYLLvrfsPtjY1YocVlnS+sCyTomkr vivg== X-Forwarded-Encrypted: i=1; AJvYcCV55Xys1k/ZP4bkxO7yBTQYb6/h4MN/MUVUvqueDfySiVLMhBznWU3ZP4fAkfUhrXqHjZ1DY3wuYP2R+9w=@vger.kernel.org X-Gm-Message-State: AOJu0YwzZJ6mtpRNyS/tKpgcHSKaaCrbcRR2bNDcJqi5SRdSuobHpJE5 Ey8qRjbZATE3T6LivnLvYlkV45cRXA6j3X9PkWqg48fLOaT+EPsPRwQM X-Gm-Gg: AZuq6aJjtEe+matzMvja3UTtL/yf1sWh6CHGfah/uu65BscUt9y6ZNGLAfWXepLoky+ O6zJhlOUFVK3J19/OrQ+XAmwVvpEMO0//gZUEDIkkd9kD/0ARB6VkZaAX0YCjpHd3gmw1LSBMqZ pAf8iCbsrbge7RbSz2i3tNj4/vfp0XymFQO+cGB2l+cjK5qmlkJf2iDI6Ei5+MbriFDMb3+6n5X MH18l2NBkm3JPXpg74vIcUURzRUyz9C4sJ1/JSJ9pdGbunlfzZCf4W6DVMGIkBeJRD09AltuZ8h 8UwRlArFuzdE7u7vnEDWLgGaFilB5XE3TEAJvcTFnX7EryjjqfZ6MBmlt5bmOyCytr4QKqoigLa OikC+OZXASemF1u1Vx3rWX2gCHGJURTCxHnMfoN2iq3xKAltL8Dei4iE6mXUNn38u8RWuNRoKAE TfbPsYDViA X-Received: by 2002:a17:90a:e7c2:b0:340:d1a1:af8e with SMTP id 98e67ed59e1d1-35369024853mr4563026a91.37.1769235683967; Fri, 23 Jan 2026 22:21:23 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.21.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:21:23 -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 v13 07/13] bpf,x86: add fsession support for x86_64 Date: Sat, 24 Jan 2026 14:20:02 +0800 Message-ID: <20260124062008.8657-8-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 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 656E92580DE for ; Sat, 24 Jan 2026 06:21:33 +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=1769235694; cv=none; b=FT83DWfeOdwbST7Y/2lP9EmSO+ahj9+ieewoYFKFCTvY96Kr6H5wgZ0PsGfTOoB2yw4YRtHCR7ppqKqMmtaz7QtMGmyiHlxulnJQXnebbPIC9/aPtaWOqC7vxBL7e+KjQ+7mEcc4y3/dnSTGdLRtserVI8LAWwIT7B5Jvg7D6lg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235694; c=relaxed/simple; bh=7cC1ms5ub9SS0bly7QzzdjNJghADRqDQHVSuwXZiOkM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oMIF9OSzbi4nRp4rDOc9mhG09r4zxdJOXZ3QxqaVkk+PuVUNjJ0Cvau+ne3R9Svm5mQAySUlLmhuOtzqnKmMJhQzq+AE4mMZBaakXydbZlCS6amA416lvmeAAL09vK06FYuWJlotEPYvpft89cnGyuvd8EebzXzKi6AUSE+Xt6g= 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=EA1xnhRf; 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="EA1xnhRf" Received: by mail-pg1-f196.google.com with SMTP id 41be03b00d2f7-c56188aef06so1219935a12.2 for ; Fri, 23 Jan 2026 22:21:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235693; x=1769840493; 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=EA1xnhRfiT0cBVfpQaCqUjWbXq8bjonP/vaoRYMH+D4LDodfJFvTHE9+Mu8aqEMa47 QxbZft+FAov7cW1OT5cV5IBWmAFEAJiGm+v8MRw2l1ElpQLlwKne4j8aWarCQr5KG47p 8hRbF0R1xlu98z+v4Jw4BSd2/FuwA9vpwMGS2Y6OjFM1fHKuJEs7YJyw9olgfKcnrj2g oqBSaheZMW+D0n5/NR07XlyZjRDHaj2NqTXQh1aywNqCmj9mHGBqR0OJuVkKgzHCz4jP kCLJzEPWItGKfass2BmBn7ijHiJ0VzQpEEk5ULADOexeZuwOHcln25OTc8EzzbCNru29 iAKA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235693; x=1769840493; 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=AzDWBhTOrgugA5o53Efsv8Sd4wAB7R4oiO0/QPEcdCpLN39yQQjdH82Q68DRlSbaz2 1Amgm6mWOTgxk7l6SYldGG0DYhsVg4UdFl8gQxsiz8HBMd+DynDiCJq7HGuclT2NVSAC lrcRYcKUKyTSbOdE2onmWnvDdR/z8QTAXJyPIZh6wMx8HOcUXBV/wbpHqAryou9NApeA rzr2WIfLLj8ikP9X89e6AMIrY1aGGv+iXHCJXUgc5z6dCkC6ZWzaCFcUX+bM8Q6yqvUz hXC3uj0YURwDpyvvOLdl3nMmp+iZnVlG3Q9XL+lo+6fmDk+NzF0hz5ITldDR4/9Wip59 55BQ== X-Forwarded-Encrypted: i=1; AJvYcCXiI6805vOiJmSBn99AcrlTTIG+DSkr0Xbp+PkrfYX90KCNknr2XHFvSFb0Mf29FVlekgLXu8MgEeNZAmE=@vger.kernel.org X-Gm-Message-State: AOJu0YyIR50hlLGWY5WVTN/67Mu3mz2JoANTDan+rDetG3rXPqE52LTj RR/Ttu+JvAbi72HVfJhoAQhKAzDRLIG6FNmKNVectu9u+yWge+wJjODd X-Gm-Gg: AZuq6aKsdfgD4o+HCvu4mYgIANjN554ZXkzNPQ3AZiNcq1RPPRpIOjnMnMuowyOThQL n/Jbf/qPF+CcOpDkC5VdAZWJUknfuttFypr0ZXvDFfmn1VOkLj4nIXIL+xn5rKoLlkNm9y4L3ff /qGKit4HN+INy0GitUqgBF8ElyVMZ0BumiauGWGzb6ZpHFwXWHix1GpX8rdMyNaNdHG13vJbydO XmlUv1/aN5P3mBcKUEZ+AadMqhcWiKOt8EwOnuYPJBVxNmbCEXMZRzu55/VcX1c/4uRIJZKC1Om CYpGSpF/0RmQp5/rTUyUFMz2Qu4Wd/stT/UQov+WeUcjJMeZ3v4ibn2eTCxssqSYfc0KICBGOr/ 5/RKu08yxqMqZexDXl84T/bdQHbX3rcLXI+Fs/uWF6WaMVglG987IVpXOoVMivbE13HzEWUO+De uFkRV935nD X-Received: by 2002:a17:90b:1c06:b0:353:3999:5c04 with SMTP id 98e67ed59e1d1-3536884bb77mr5366911a91.17.1769235692687; Fri, 23 Jan 2026 22:21:32 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.21.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:21:32 -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 v13 08/13] libbpf: add fsession support Date: Sat, 24 Jan 2026 14:20:03 +0800 Message-ID: <20260124062008.8657-9-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 2026 Received: from mail-pj1-f66.google.com (mail-pj1-f66.google.com [209.85.216.66]) (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 70AA72848BE for ; Sat, 24 Jan 2026 06:21:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235703; cv=none; b=owxTgdjVtHrfavIim93W1Ke+yRK7gn6SDGY7uwXsXTI37ZmT14wKw7xQbilDsM0dS7J2NymnN5z9dQROcAQ8UUkIlynd/wAn6fmiBVByJsPm0wwY/s+mAaBx4Xwh/huCbpuzghEXE+CrDXbT9/1DBTSKPsqHAlW7nuRgCq803Mk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235703; c=relaxed/simple; bh=pPH6IGYSvT73W3XnsSk5F+V+bv692q4Zq0EDWpqk/mQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XUQ6jm6+hpTkZsoa8YypDIXJej86/UNyqKWNp+LS4b2/bJESsW6YysmiKIHkKREfFhZZG1RVVCSX/DSKVqgmVrYQrzKUZGxmIcO2po3GB4T1Z2PIqKz8HrmWD1Vx8AGOw2SpbSN9hEWw2+BqJBEpLpBDTOXQeUD6n19VpoC7CgU= 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=Qgq9l1Ke; arc=none smtp.client-ip=209.85.216.66 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="Qgq9l1Ke" Received: by mail-pj1-f66.google.com with SMTP id 98e67ed59e1d1-352c414bbbeso2722022a91.0 for ; Fri, 23 Jan 2026 22:21:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235702; x=1769840502; 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=Qgq9l1KepU6Pr+fN6DOapGGkD5H3M03fk/XunYGs35TvqsfzesnMVTvUsii9Uygbhb 1zPx5aptuRjIMlwKo75iYH5wth1y4jQewQxE5/AX4I4hpbgrgVzvDNR+xexeOyURUu1Q Wl+beT+hTmTuAAtPWq+/g9DUBcDo/2GUUb6N69uD2bJPXx4IxAU6j0Fem6MpyalcM25i czISzJNIL3yPZ7ul/J6a5v0D6q8ba+kCgpD7a3T098fM4y2V8WLV5YMtKFt51mlkI+bN jfXSmRhRdYxZByiOA3ZZ4dA0mcrtJfdp1vg/T0z8yIW72Zy0vY7bUF1ORk6ahffIuy/l vryw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235702; x=1769840502; 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=OMiv84jLOlLfJZkPtQs/nsaucJ6WTp1AubSw6kiyqr1FpFfrBcVj8G1B8kzzePIrC3 ucVeHpC9TAenyMnCKG95omSF1HLv1eIbp9YPOGlBKrmZKWIOUUlgpXqQUFq2LSm8vMHy QCK21IZhM4J+qf4AeuhtG4QZYyMAyie4Ub/TiiZrQ/JXR92AIRLBIclD4TJamqUz4BeS tCH3m04HePVbYH88hVYEj3MTnueg8r8es2ASwWCcY7EFs7A/355DfSuuGQUKS184A1Lw SdNys2SkQBLY2Hxtu6SSd9K0zOeGGjaEp7N5guVfoZSCxQi9psvrsvf/c7im3UAs4PXr cW+w== X-Forwarded-Encrypted: i=1; AJvYcCXfwkzwVb1ZWON6cysDCkDhF1xKLdH/i3Flggsx2F+OUQd1A++Pht0vMFP54RKtf6++wq4H12rlDIXo1O4=@vger.kernel.org X-Gm-Message-State: AOJu0YyIZljVKN82SzehlrhKMAmBrxMM2pqvszfUSPpK1ZatUgO2lhcb rNOhe9w99Nj8TEVPUGIYfVAFb2RDn1GbeXbsv5+e/C+w9Q3fuq3yop6h X-Gm-Gg: AZuq6aJ8/LyVGrHZ19NuVDHnVC2s3BBGzJd9WB5tc7Tgv8lOIKBAH6tpwaUYC+obdMy b4B1SJOEVHDtZG/UBCnWTAGSyelKdnxyHwmGr1P0qt8YnNMdX1wgieMXrxcSjmZld++oUtgzHSk /U4AdDo6gxMqJGT4BxkatiZ4jk89Feie3vruLbZVeOblQ64w+JBGI4+FgtXFMXFFZjR8NaWm4q/ oQdSqksBu794e39dj/COZ+zXeF4rWg18wnci0QXq8Bv60QVfsDFZ3v+XbSAMgjUNEsAzIL2f6dn vzj/hLdfkJgvAXKIyApJLxJMq84tYAOTqvqXTxRuO2EAKo2qRVWk5t7gdOPHsjvJAJEmPNuIdFd a0Sr5voklKpmh2QLzxitnZpTNT1a7v3KkOxG0KlnVMQegukk/UPtYZwr1abUfzCnBrg4l2e4ee5 aUpUNPRdtY X-Received: by 2002:a17:90b:4c0f:b0:32e:23c9:6f41 with SMTP id 98e67ed59e1d1-3536ac3b86cmr4101831a91.5.1769235701779; Fri, 23 Jan 2026 22:21:41 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.21.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:21: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 v13 09/13] bpftool: add fsession support Date: Sat, 24 Jan 2026 14:20:04 +0800 Message-ID: <20260124062008.8657-10-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 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 87C1A2951B3 for ; Sat, 24 Jan 2026 06:21:51 +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=1769235712; cv=none; b=DvD/46ZPeh3Zkzh2ft9JttpaZZ/rs2XgdQTCb/92Vg6pszxVgXWBy6KxU8es6bgs3vsprEX39tHN/lcIzM34GnizbBpwiiCjhE1CVxV9rUgK0PvuCePnoLrmqFEgMa88qIF+1l/FCSLXvjJ1deNovPjUatCkH0sYJ91uA4DeVZM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235712; c=relaxed/simple; bh=NMhfMKw+E8jT0WPxwfHo2GO3dNgWbESa3HXh/xZZFQI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tgZQqNnWZT6WkQ47GGFUkVHv/i6AEdSwSSms/xgrLXtB7Ob3jbQbo5JZhnZYEL/CWUUo23xlP5e33fy+MWYK1mf/G78+vVdDLDGpC8vxC9i6MBuLnvGFoXU9z9HGBqxU6XDvAdltELvSfGAc+qNwuGR/lY6Kt5CsaUgL3w+hFcg= 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=nnyPgBgk; 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="nnyPgBgk" Received: by mail-pl1-f193.google.com with SMTP id d9443c01a7336-2a7bceb6cd0so23759845ad.1 for ; Fri, 23 Jan 2026 22:21:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235711; x=1769840511; 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=nnyPgBgk0Qt6bK5+nC3N48gjjAI/cW3QWwZ3OAQoJgf2HUYBf6HofP8sSkco4f5WKU cRO704xHhrCzXG4coK6LtaZIa9mpNBJduPfaxOq5khBCsPNK6Ri9ZyR/mA9Ya9WE/HME Clmg4WIfqLjHU+lKYRrZQmJgYhiGaU3iKwi+y014xwG8iogBkNqim71dqZvMAtQJB7xl c126dt3UoWbtkeAlkB16OVBHUQxyypBVpi0uIjYGNygZYNEZtnD0RVtA8lmiCt818VYV 3/2UlPwIIksq3MbriZEVS9+PlOwvXiZC4Y3xV9AjuX7aYCYNUwkm4B7F+Xpte9eoj47I ASfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235711; x=1769840511; 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=qWnggSk/87zSUV6x9alUTAXGtORu2SsiPQDc7vOXQgNqHjITo8I9QqCel5HrV7wcgX EhfoGXZs4m/dHBdOwQu/I5iOn6rfWwY0rg1SrKu7aDBLGysbEFB+kvwravs97d1LbmY0 9lFG56ywhbx++COQB+Edz2hCXUQ5EE4GwdLRRdBoZMiEjuFFc9N6stjMxslzZGO/uFyN C7hnVbhjtb75DfniXqaviGSZXDT0YDRQI1WMQD2RRV9588b1FUtI9sG7SpxpYsPPGYfk IGI9jc7wgG00ZLahRgdllCyby8zd39IDgHoCwfIrXJY9kHaWq7yAak2ZhWrE/iuLt/Iq Lgeg== X-Forwarded-Encrypted: i=1; AJvYcCVaHYhfAjySFDnXwzddjt7XMaW9IWWKoa3ZP86AAVnOI+by/eBco3iqRU/nNf6jUVEXkQgJ5C6OE6kffLw=@vger.kernel.org X-Gm-Message-State: AOJu0YxO4pVQ2JZxYRn1vcV8XsxKWoPQPXr5TrxMHYwjh+NwC17ubB5S 9gHMvuGpOk1pRpN5Rl7e5Jk5v1heZBYeWiCNtsr4whZbwMDLjd7uzdb9 X-Gm-Gg: AZuq6aJ8T7Rkbs+pKUnMHLw3sti74FuXM9hb24sg5ge1w6Vad7lUCfQAqEHbIulFHu/ MCKMbKVrfSZsyORE5l3HSinDNYby/PkQ4KEpu5SRjKi0GkYqZBWJ55zDfT2BEnQpWrzXDNisbrJ XWyabRktCRS4OZJeS4LNFT1SAzzBpPtRV7JTJWVOAzBgkjFO3P4crYInGAbkNujSpZDnUPGlXAl YgtFIgxdv2jEidlMN5fYT425kbtAQfG9dBvENSN9lei+IwLyNlzIGeeDBQrbOWvT1WjSy68xTnO r2Z4lIob0eZH+/ZA5WPrQPh+kvQwfwaJ+CBEPsWLBBD6mSBvaBgx2rnXN/AzgHBJG8rzwEOrsJd Ze3H4LX5P09dWzufhi9WnJ2GULOqTRFaOss1lzr8RF7XcH5GYhxE7qn7mXmeC74gIzZ0d09ExQG 8XJHxMaxLS X-Received: by 2002:a17:903:1aa3:b0:2a7:b646:54d0 with SMTP id d9443c01a7336-2a7fe733e05mr55712075ad.41.1769235710737; Fri, 23 Jan 2026 22:21:50 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.21.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:21:50 -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 v13 10/13] selftests/bpf: add testcases for fsession Date: Sat, 24 Jan 2026 14:20:05 +0800 Message-ID: <20260124062008.8657-11-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 2026 Received: from mail-pj1-f66.google.com (mail-pj1-f66.google.com [209.85.216.66]) (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 42C92270575 for ; Sat, 24 Jan 2026 06:22:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235722; cv=none; b=sOXoTPDyFPu9CHXjQyDitvHvdEdqJeN8syv0qGRrYTS/57O6ttFndY2D5rZ/L3eyBasuifdKK/yICK0DTocdxYhP4j27gHDM53cj9X2+P5fip6q0Tqvkf9vfjUvgbAlt3MIbVO0+d9NSlrkyx8nloleJMP+BmP2UMNjJIZn3qcE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235722; c=relaxed/simple; bh=h4fZJ5/eB6h3kRSc5/YL4hLV3+bf/vzJfsSepeg4Yyc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=aLnDn1VMuyguCm1OnDvQo2GUO1cxczr/KZJJegC/NcGNtHmzUsJ1cSYsLTzM73yG1Vtd7bOcXWt5l1ht5/2tmiCnOzXSGp/yA6XcFCqx6ybB9C5CSzfPFbXirocwf4K4atsaUXJ/xyJBZvViPPGjIFzM7ZaAG8Ll08XSFdACFug= 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=SBIKZSp0; arc=none smtp.client-ip=209.85.216.66 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="SBIKZSp0" Received: by mail-pj1-f66.google.com with SMTP id 98e67ed59e1d1-3530e7b3dc2so2592188a91.3 for ; Fri, 23 Jan 2026 22:22:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235721; x=1769840521; 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=Wm+ye49UjjJWSoY/pCeQ81QIgmdFuPgzbXJ82TRTTWs=; b=SBIKZSp0RT3bp6o20NjcU6iGvBRI9FgXOQ8LGfu99xfiVacpZlz/cKmv/5INO/uFqX py8EIusIUqpKGMFEV/QLmoFe0O5CSCkYO+4izMpBEpQw72rYqdJgfcKRjju9yTEk8q4n GYEAuZFO30NYk09QlDXKgzQCkv05nIs2ZGokBc/41jLOMqxG+1NdKSdcVkcHcl0lzD/R bG7XnOxLIQ1EKUIEKloULFa3rv409dWg53BtvZ6rFyDUrVEq1k0bC9Ke0heuSwDBq6YA GM1MVUgagbtA8HuwlyCpZfuJH1O52QJl7MHs5bh5LvZnTTOy0StC1TqMteK2PONxo1W7 FkfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235721; x=1769840521; 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=Wm+ye49UjjJWSoY/pCeQ81QIgmdFuPgzbXJ82TRTTWs=; b=rbAzjd0iF9Ao1Hv0TsolGilwYocZ861Ehtcbr/i6vsi6Nbz/lGw3RotG1YWQFf2yOo DlpiUYKM/JjJhBAV/Q2YFAej1L6ginjHl36To2/em3YPfWs8S/ZlxybhEqEXVHYW6S4d TuPvvFTsYbLAXlbSnlcBprPp8kSGf8Ei3QqyELmHIvLEPPjsdY94LksJ2xDBpLpY2b04 v48lRHTXnwtHqMciASSpDhQSrlDLs54Ri1MWrAcE4xUU+Dgm29ClrnFU74I7vrxq85Sg ojKCCBloBWji+Bkp3fVgaMQk4RSOEWMPgEd2UMNlg4DI5a7umSS/bukGskdNgR1BW/UW Uh/w== X-Forwarded-Encrypted: i=1; AJvYcCVmFuNvNSM/T3XTsvsHRSvFSbw1MzvvZB2RcV+/Jn1hf52Qq3oS+I0WRNLc49zAiyzfgG029ZeJBRcsS1U=@vger.kernel.org X-Gm-Message-State: AOJu0YzRXPRXzsZgDExE2YA3/OW+AzxL2unUN4hE4F5uOTWC+G0Tg0Gi 2jAEJupNF4p+f6cO4kOTfGIOWKUeUXqkjVREEFupZuIGtEdRps5DoaiP X-Gm-Gg: AZuq6aLgj5kWb2le57wUBazv7XzBkPUxJM/y7IoGo0WdLUvqAFzGkZX95+9QSGsBU8z j+O+4rY0lOzD2mSZM5Rd04S7f5VpP/66YRHMtn0HgpSmf8F6SzWJw5+79sIeJJLdGEFy2+1a0f8 sl+yfpNP0rSXwJVnyOcoDkOHES1p5MnQtqZYnLGJP/owlZ2iVx4UI8btSX+aVMAyKow8hqJSQHe u9HUno5QTvs3pwcibEM3UOxeYSnrbbkBptcCAK3rFHM1ZIHHxHL8IexWVK6D1Ev4+0p2vwOHKTB 3yXgcZTcdiCEVQZG9xgQVEO39qC2Te7YJCuPzLGHszj9bl3yeaRCMV3bEVgmA0kbLgedfa14i/F Ai/3q77ifRTY63C9hBTw6BFLgPa61yCjnmgYq1PDKCFSDeeZiSw8WaNBgZSWZRTSK9+xxsBWI8k w/gZUmiKfG X-Received: by 2002:a17:90b:4c4b:b0:34e:5aa2:cf61 with SMTP id 98e67ed59e1d1-35368c436e7mr4203172a91.28.1769235720770; Fri, 23 Jan 2026 22:22:00 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.21.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:22: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 v13 11/13] selftests/bpf: test bpf_get_func_* for fsession Date: Sat, 24 Jan 2026 14:20:06 +0800 Message-ID: <20260124062008.8657-12-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 --- v13: - fix the selftests fail on !x86_64 --- .../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 | 40 ++++++++++++++++++- .../selftests/bpf/progs/get_func_ip_test.c | 23 +++++++++++ 4 files changed, 65 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..0a3236a7a109 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,41 @@ int BPF_PROG(tp_test2) =20 return 0; } + +__u64 test7_result =3D 0; +#ifdef __TARGET_ARCH_x86 +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; +} +#else +SEC("fentry/bpf_fentry_test1") +int BPF_PROG(test7) +{ + test7_result =3D 1; + return 0; +} +#endif 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..65f7e1f182bf 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,26 @@ int BPF_URETPROBE(test8, int ret) test8_result =3D (const void *) addr =3D=3D (const void *) uprobe_trigger; return 0; } + +__u64 test9_entry_result =3D 0; +__u64 test9_exit_result =3D 0; +#ifdef __TARGET_ARCH_x86 +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; +} +#else +SEC("fentry/bpf_fentry_test1") +int BPF_PROG(test9, int a) +{ + test9_entry_result =3D test9_exit_result =3D 1; + return 0; +} +#endif --=20 2.52.0 From nobody Sat Feb 7 11:38:06 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 B0BD72D838E for ; Sat, 24 Jan 2026 06:22:10 +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=1769235732; cv=none; b=mAXoT1TCwGoYgXjCymwF+zDXi5j4pv0Aqqrv64ZEUSC6UjXU34L2Ezg59o50Nu2dZfE1+zLJbgqqYWiLYZ78nuvdH+i2Rn3MyYofwPQuyV6GVu7I0H4uQQoFGmysKOgTbKrEGE5CvYLkXcaaifyiPSJkGT4FLhqJdVSAj/33cCk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235732; c=relaxed/simple; bh=MY0TzEwIF2cncGc4J2MGjes5OtwOQCXp+QMlMZ001rc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Fz3oe/GrCcXB/ITlPGeg96lXdmYNgTM98RVCzkiIei/YTu/f40Y6L7V7t3o23YvzUKyGatUP+MTJy3EK5IbrYrglMC3Qk2yY9BP6lOHM7hjDoPf8jQzI6L8zhR0co8zeiNU9J7lrSYUf1kBqOEGyoOcCLnAOfvFASGu9od1IbAY= 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=TTFVcNiq; 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="TTFVcNiq" Received: by mail-pl1-f193.google.com with SMTP id d9443c01a7336-2a0c09bb78cso20563625ad.0 for ; Fri, 23 Jan 2026 22:22:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235730; x=1769840530; 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=TTFVcNiqPiJrrrHYoxUCBVHB70RvgoGvGb8IKFBwd8poQo/qBDB/k4lU1CIu8ujhV9 0L3BSht2kzXWJIHdddQ6QtxSnlsnlVoJxpP/HcNINHWT9BynqdMtrZ4JpSCkKuAhIMri DLCmpLx16q9VTiwJDnRWibzUg6kwr5RAJHEw+kguqRcIze8BPAuUYVBeXviUdpWGAoUE J1UbVaazzy2ufBV3KgG3rA9Xc6Ajq/rDkCqyaJsAybsMX3ne/GA0IcQRJdSZq79HgwGX 7o+6uaiGDx3UuBrhGU5849XBj7EaTQCDSwm8di0T02pHF70V6PVwZsURVUMRKDiAMy3n 34Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235730; x=1769840530; 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=ePdQfUFNGdSLnmvbS0f1KVsfqZ5UVrUaJqHq2uWKcYUsLbjH8knGs0MKcZhGampDtL wpL3x13vXKtfYb8Ucj1j75QBLiLFbQwq8gz8oKs/oIKfCp8FDbCgNhh57lWf6LqArfcg 07i2c4axWlfWLwbr8IuPfyra9UFuP1NuWYTCV5psiCUcj/F1Ppyf7D7IFRQYef+t21E7 ++VmSKR74eMVNO0OSnGGHyS7bueijt0eAKuCSFL0siiv0MJCOyz7pYkjvqyMCftKMJcX 65AuRdp/AFzMaFVBKF0Sz/m6uHJafriPm3R7qEBMJOzXvn+D30mdqaXqBFGgpQnB5AqO Xj2Q== X-Forwarded-Encrypted: i=1; AJvYcCWBT4Afm5nzP+9yJTDfDdBgM0tIPt+gPdIHMmLi/J+po7alqYShRSXYT528F5GuGENfA0irv+YoFkufIbM=@vger.kernel.org X-Gm-Message-State: AOJu0YyYQpLLANIlVsaroB7ryLMxOnIKQ21LpowWnU7ajd33cSzU41ly +rBLinhv/1LZrxUkZ9QI1jTuPyEKW5tBSdQ+VpKlRwRmrl6TFjeFBtb1 X-Gm-Gg: AZuq6aITw4T2btH2Tosw76m3fuW1QlndgzAdMWoh68u2754Vf+h7jpjdL1NBUBM0fuP ufRO06WzVbaRfaHWVIrnVavhtwpT06ZF5ijwudUlV8MZEvpbd8qEx4oBdIobiwtqCT3U/xl/nis v6FLI7xeGrzD+rQT5ObqStVeOKd97DsczDL0evOnx6hgU/h3JRzjdZgBqIpAYtey4Ibf+mzIR6c hBtyc8YPFIbIP7+8j5BPneiAQP8EuXswYxFBPVVKMza/Rs1vjd+8t0pltDyyhoH8Mv/XPYrzSNE ef9OdC2HmqCV82iktpUuBXe5DJS6mUaeJ+qk4Im2RjutNi5LO8giZFlgb7tQ4oLwy1d6z01DAFh 9JO2H12uAbPj7HN/St4bhpcL3iGU+yPBCKJrlyFQ6b2u632N3Tk7znzBch1JCnxjfVqUzx6LwZz ByZMKYifsp X-Received: by 2002:a17:902:e744:b0:2a7:cb46:7069 with SMTP id d9443c01a7336-2a7d2fbaf36mr69604715ad.25.1769235730121; Fri, 23 Jan 2026 22:22:10 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.22.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:22: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 v13 12/13] selftests/bpf: add testcases for fsession cookie Date: Sat, 24 Jan 2026 14:20:07 +0800 Message-ID: <20260124062008.8657-13-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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 11:38:06 2026 Received: from mail-pj1-f66.google.com (mail-pj1-f66.google.com [209.85.216.66]) (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 B2E9E2D5940 for ; Sat, 24 Jan 2026 06:22:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235740; cv=none; b=OSxuDDs6Y/uXG6g5k9ptkcQRUJqcgxJ46HC/pOrjnB1M4jYJS1KQWnaZNkK8gXRNxFo97Khc83tTQiwvjpR1kExvGWQ1pIkNSWvAXxBBWKB2SjlCkFL+r9KBTbeEcNBEL4qvIzc3CUq5AuKGR4e7ql+Xd5K5lcYuRQxCpDFb8WY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769235740; c=relaxed/simple; bh=mSDxwBVD18PlqYhebUKPcoi11BSc/00xy3TAGxUREuQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jN7zrZuV8e6gkJKFkynTGtGrDbZ5YTtl3KMApurvuwdfFlWOrk/1PzdY2/POPLNCR6X7BnZguIqbCAK5DqtzzM42Y6VZAEZiT1tNZi7VvlpU6th9pMroUgE8bShB5FPQXhwdakLprc515+biGqKkOChKQvj8SAPhm1m17LRvyo0= 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=fNDI7oW6; arc=none smtp.client-ip=209.85.216.66 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="fNDI7oW6" Received: by mail-pj1-f66.google.com with SMTP id 98e67ed59e1d1-352c5bd2769so2018015a91.1 for ; Fri, 23 Jan 2026 22:22:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769235739; x=1769840539; 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=fNDI7oW6EPwAxhle9ZKxHbH1rJD+lz+UF3NH3nFrSs7WjFMBY2iJJ4oAjlBG8HFKDj aB4qfOQPpF3u34T/RbZKgTDit723u/w4hG6B7iuY+3cWo026u3E5ToXv/myxFcpV3qm9 ZdTEMCK3KH5RGaXoqTNw90BTjfjy4G5iyG0l2KFeOTrpcr7bOOCD7MMG8t2ozN6Rk04s o9vCsM2Oi9e3Y29+2DUCzY1xe5HQcQ95YQe8j1/FNfAl4SwqF/6aZ9/WkblVX0/6LWc2 JPxpLMtud65Q1FVWlgCnFiEviMrI+wGkwj+hG3nwYJ4KyXXm2EuX8Qyj9gp08W0RlApc bRnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769235739; x=1769840539; 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=BvO9QnG/ynFyOC0P8QQ3dEkI41Bh4Rk68MKLSaDplUCgeus8FBjh8JgN7X/TfUo0Yt U25/zmMigYolR9Q/EhIEY9c8WRSs0H1luNl3f4tc4hVK1Qe/W/ctRYtZ5Ira0OUC1klY YhmgKC/QSHUAFBlDL8OaJHW9Fgv4D4cfAPzs9c17NQBCd3qU8TxBtsc+YohKva3Vym+w Y8T60bdJLIrx4tAHmZMGAegySCJctNmPu+PDYB+8R4vRRcIMZfPzSO9tooPfucDCy3wE kljO42gFS+a8k5g9qRp9eCJip4MY//wVS3W3N8JP6QxYHW34QipCSYyjTg/A6hPWUE4K +J/A== X-Forwarded-Encrypted: i=1; AJvYcCVpxkOHLVopGt31VURjHE1TrY7Qs5qm4yH4+KEwNi6FhKBCLiwG7Fh+Krheq0Z5chopfljtfdErhsQNA8w=@vger.kernel.org X-Gm-Message-State: AOJu0YxA46UFg6xKT1rT3Dv3oBCsnt9wcFsPAC5gpIuZmvgalfohc424 CtkshNT3VBglGBHLVCMNbcRtTkP3N0jGQBeIvC7nCu0iq0q/D9KECEwQ X-Gm-Gg: AZuq6aJoYWU/XL0HaUwNt6hhETQYdeIozGg5NKgj/Zaxe1UUVd1fDFghMsFt5TBtJQu J3mT4hBUECVb12wf3rOCfygQWMKowU/HoWa8PbenSDKdM4jgDLgqFbr9AjN/+yX0xcwn7eZZw6v H2mAfwGcrhi2CRQUXcrJ/PY0LjX8rTyzhLm7n4A9HB2NaSudJuh3VkEMJIaFdKApSbEGmxzVKp3 7N7NZJD3XLzM9mdkmum3/vfutJKdqtHk69l0fw8cRcFBZTUG9z9prhRkN7aOZzYnq/zbL5fNkvZ SjOqm6hX5C25YVP1oYVrgdyea7lE1VIBD39W0Lgi/6eWAjJ4b/yEYchNJ8It08pW8IFPdKZpk/K hXyGsBoKzbPNXprXugNgyP135HoZvUR2/5eBMeyoiZwww49lkU2KGCfTNsGgYrK1JLxIMAGIu6a uWS1uNfvC4iFARfnylVq4= X-Received: by 2002:a17:90b:3c05:b0:340:bde5:c9e8 with SMTP id 98e67ed59e1d1-3536894c35cmr3832652a91.22.1769235739094; Fri, 23 Jan 2026 22:22:19 -0800 (PST) Received: from 7950hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-353354a6b5asm6496537a91.9.2026.01.23.22.22.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 23 Jan 2026 22:22: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 v13 13/13] selftests/bpf: test fsession mixed with fentry and fexit Date: Sat, 24 Jan 2026 14:20:08 +0800 Message-ID: <20260124062008.8657-14-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260124062008.8657-1-dongml2@chinatelecom.cn> References: <20260124062008.8657-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