From nobody Sun Feb 8 09:12:43 2026 Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7E2A32EA48F for ; Fri, 23 Jan 2026 07:35:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153756; cv=none; b=CMWZBMBcQFJGCuUJd5DRDU1Pfo+wPohbb21p+UdaaLcVa8JfzWFxopNk5IaYL/Hw+291a2XGBO8a+s+vvSLMPtNuNlOS7r/YAVy20+dcPgPmyMS/U4IYYhl9WIudqwL4QRhIx1KhNHOiplRPN77qAEubAYDTI9SfMEdt14rHHgg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153756; c=relaxed/simple; bh=wwBM4KNzRljNZStnUWhG7h/qOqs25RK0YzU3W4PEVTo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RUngwtEEXZ8A9+AmBZZSyOtUj8iGyFJ7jgupiNrT/6lNof8QueBRRcmERwXEX81abfJMeSqZcm8zOO5crQXlu8q75CKCvQlCPxabQsehUMVtCr5lpJI1gEbxnyNNHY/0J5Tk9GUffBlzRQLhi22Fq8R37aNzwrk0Etwl057B30E= 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=Kyw7rv9l; arc=none smtp.client-ip=209.85.210.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Kyw7rv9l" Received: by mail-pf1-f195.google.com with SMTP id d2e1a72fcca58-82310b74496so621052b3a.3 for ; Thu, 22 Jan 2026 23:35:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153754; x=1769758554; 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=Kyw7rv9l37g3MI80r6DWi1z0zHmFjDWkLRKN7mVQrLjSc6pZc1vEAa0Tn6QQxxa7Xx xRJw/D4t7HuC24rM3Zh3mu2CJdMJDyTpB5efuOpybZc3fP/m9JvbgbE8Cu/Ntsz5S44m GKrE52usyCDJmntmC1kGXIK/0i7zVwe6Pxg6GMCI48DpnJtqkE20kERNZd8ILF1r7dhD Px6/IJWruRuyXv2gINaOj3chx56YKSSTpfp07wex9XISH7O7Tqek7UTPol7tpp589SY1 wVUeD0Zj69rJE5C8juyIZ79bOoDIIJSvjQdxSDRO9LohJwCV98ZX1FNiSGXsVNt2Ok0I 7G+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153754; x=1769758554; 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=f9t9515Yb7GEl6rUSNb+GTtzzqVt4jrI7LbxiCLUAo+kDiRMdQVFa5NVLDUnqu84Ys qBQwoOiJEjrcvb7ZjJlFif/UA90P5gvClqPRs8p938yKOhXOmXIxLQjiyBEqJ7u9ctDH WdXpDccU8mwAtZaRZvzF5/V8iCd+/wgz6jm/OyCk3MuR53Noe0gckfHiWjo1R60W1Eb9 GBpF7ArZY2JGlysJRl8aDECPQlyT7zLm6dRVtVaeko0PYbg89YcreOphn8DVAudfmk1O DmPSt1Lon9WhAOc1jOi3WoT+w822EjPKfv0FvmNPOmOmaY4F9Eay4xIZU9XDOnwtqyI9 DNRQ== X-Forwarded-Encrypted: i=1; AJvYcCUNLn+U6TkL9uTuILp+M8FjhJz1zFLdw/Q6uPusWS9Ms4zwmob8P5K9Ka+mbv810RfT4LSK2HAvD8VcTXM=@vger.kernel.org X-Gm-Message-State: AOJu0YyCGjtCOeFbBnu6hm84NOtwgffl3ejqwyQgtpltARi3Tl+fYUq/ U2jEB5SAdcHcoRMjhqPvF9uVdm9XRhhHJfzzYbq5+xoVZgh9sKISvBqs X-Gm-Gg: AZuq6aLaWQCI6Pa5JoX2ljm1/7ZHApTb5XZZa3h56LXsuUwE5HxpVDXafQ2fB898nNb u9NIWWZI9/NnUZe04YCJIni/y44AI3Pcw2IPCGdg/yWnNGnQTBoR1N6HjpTmSOWLVj6sjFBgPJg HoDCzKnvDdM/LOwR5rq0xmwNK920isl+r5Ep4IdY2MW3MPkFagSW5RjwEm5oeOAr916CIRazkPN nLkTdC23crPNvPj1GAH3FlkCRgsOYZ77XLGooMAFQkv1ER66RKxvTcC6PvWHJUPOEyt84QsaRP1 2NyyUUEYSPP8cMYHSP2qMAO07zwI+nfEyGGTH4+Zcj4FiRwWQ4ZSiP4gydFds7S+jnZk1y4ZrTm xBrI738KAjiL0T5bi8JdAWsVaB+ldRrkHtVq7KvIHYCn0jTz52Q8UUHj/U6SFxyZ2pusnnkMpz4 pBPzrwRDfIb8uhMi0tdwU= X-Received: by 2002:a05:6a00:178c:b0:7e8:4398:b369 with SMTP id d2e1a72fcca58-82317e7ccb6mr1640687b3a.60.1769153753738; Thu, 22 Jan 2026 23:35:53 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.35.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:35:53 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 01/12] bpf: add fsession support Date: Fri, 23 Jan 2026 15:35:21 +0800 Message-ID: <20260123073532.238985-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-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 Sun Feb 8 09:12:43 2026 Received: from mail-pj1-f65.google.com (mail-pj1-f65.google.com [209.85.216.65]) (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 1D2CB31619B for ; Fri, 23 Jan 2026 07:36:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153763; cv=none; b=duepT7mQkIQAtBrU1hh7asJsg9FYnBPm+42Y86VyVWhksl31wtlR4ZQPukY5KHgDPcW/tiETNWOtami+HZumTKXOrr+L/PU3oY0QT/nJenu4g9M2jIW+UwC2NCHCPb6BIxrIuex14gEpD78fVILpjfAtdRvA8on84GEYyydTeW8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153763; c=relaxed/simple; bh=Cjpi43NnpU15TBezTUhlnb5sQ72udzYmaXV8ZdEL9BI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GElZgxhE+fHSIqlwIiR3wczggjTW0vBuH5SG496WFLlrnwpl83/PYeCo7sQPBHCCPsl8HtAisJ+Bm8XQVSiG6dwwEsGvTHy1KGxM9oOxUcPSrF5TlsE7hvIWxATKnZI7MNHmK7mKXXDlxlKkE3ZF10RDXEq5roH16qZDs+rlWAA= 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=fOm++M0r; arc=none smtp.client-ip=209.85.216.65 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="fOm++M0r" Received: by mail-pj1-f65.google.com with SMTP id 98e67ed59e1d1-34ccbf37205so1041074a91.2 for ; Thu, 22 Jan 2026 23:36:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153761; x=1769758561; 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=wLdDM59DXRWdxzrRIwUsnUpMT5a0XQ8O1OsOpKALewc=; b=fOm++M0rBYRj6TyieZeUiFyPsdmWAEWHWYYPihEFAbgyuhE+PXaNV4+KjHhXnFiIrY 58GIZXbO56K+m09PFIbZjwiWPVdJDmTC8LM66DnH5e/3DgIIB6dvNuspEOqn5lB8SQfy mlH+jdm83OT7M3k46vj18/kKg+I0VVpOelZOIopaMuFG/VqB8kzgqXHD0cp9HJ1eKE3N 0HghXW294wbzhMXFDYFFhgVNtYSF4QSW5oefz+xfC3JwZXVu5VRAOvTVDJceP867CEVW AwoJgvaINy3SBBEZcScfAIjbxE6cjoFlGnRqQVzGo3pjd3KBF5pnjS4wIcaOLUH7X0CH Kedw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153761; x=1769758561; 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=wLdDM59DXRWdxzrRIwUsnUpMT5a0XQ8O1OsOpKALewc=; b=K9FS54m+qHVn/Ydqn/GL2IZ7vuM43NucpcC8BlOQL4D30FNuq/7qgRPq0q7qqVgRmP jegDPX8wbbQ+IJF7HN5u2k0xnuAhS+BXfXHaRbrTL+8j/LqJr/llhvM4GZW5QUR+eEfu Wncbdz4xWlHY7RGX8I4UB4H5zUMslWZv9P733xM+vMec7nCZC4bngoI/Z35PppRhNLOi PWclv8x9dW88N92EPFZu7J/TD2T2RrQ/58iYuROsAUFr7Z7vTFdcqBAc/7NQ+nDluePc Wt/0Lv1OeQzUbo1tdo2Ca/Zhu5hxRvtY9t2VxxKJNlVibrO+4Bdifl5qV0ifYKmKlAZI nMSg== X-Forwarded-Encrypted: i=1; AJvYcCW0NLr+wHTK4aQIETQAF1s0mfqlAuqM70bPEMjMFHu/4TfErD+zBYWoQfcGFdg05Wth6Z4CBOEAapy2erg=@vger.kernel.org X-Gm-Message-State: AOJu0YyAit9H2gzcy97OyLUakohb/q6psOAg2QRL7m4K++gSRzMeAoQj K6RqDKZbCjs60iVsioQY8Awuj3kY+r6RqMr8XYYz3FHz+Ekn5cu1QRDw X-Gm-Gg: AZuq6aI/VF49vq44QbSLIWwSjqCKyBAXWq/zb7eGGTCXrsPl66QZUsqKjLYKWWzPVF/ VR8RYk3u0n28XcfErB9EnnXYPRLVsJU5oGOQEW+93I3OVz08U0YyYShXjy6eLkZXZTD4sMdd6TY f7hI3M28IIh2gtIDO0vej5GZ39PkxX1hYUCskjQqFajNpw2c4xU7cFFFSfq+S7GRCBpqW1U2aaT d9ulSisfq0jTrW+ictJ7NOeZZUHuVx9Nim0R1KdXoiPfySm1gtq7sopSorNT7g00zOxtCVw6518 faw/WmCBQaS64fj9xMiUmReJf8NWiYoE4/2BZQtdjw8pj0ArKB7WRUQRl9hR7n8oI3R0kJFxfUq 3mxDk7xGwn5SjOOGxCAMLcGTXiyuHI8T553myztsyBC1l1FeEPnugZy3aHqSaRaNToluC1BlTgQ 1M6wtuZlmy X-Received: by 2002:a17:90b:3911:b0:341:2141:df76 with SMTP id 98e67ed59e1d1-35367028e9dmr1880255a91.13.1769153761295; Thu, 22 Jan 2026 23:36:01 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.35.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:36:00 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 02/12] bpf: use the least significant byte for the nr_args in trampoline Date: Fri, 23 Jan 2026 15:35:22 +0800 Message-ID: <20260123073532.238985-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-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 --- 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 | 38 ++++++++++++++++++++++---------------- kernel/trace/bpf_trace.c | 6 +++--- 2 files changed, 25 insertions(+), 19 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 41bbed6418b5..b3f912ad18ba 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,12 +23811,15 @@ 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 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 Sun Feb 8 09:12:43 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 0F5A23009C3 for ; Fri, 23 Jan 2026 07:36:09 +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=1769153771; cv=none; b=JW1ykCCBOAs+LPQXQyohuYS8r/lQypbGs6HPt5KTfOd5vksJR70pEjMxZ6y5ZgTk7hvZM3xfJ8JpI5VOZYLdgJMT/XnM7c+2YTF0xuZ2NXlb6PkAZYa5lb2Nx7+lts891drmVX/3ZWRo7iWJiSM4t5QEaGk/hthnuOZCUHCWNlI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153771; c=relaxed/simple; bh=0ekXT3EqW+uWzRM1O4jaZEPlNn0dCZagrrwqgF91I9w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oWa1+t2Qr7Xq9Dz55snBIEYqFS3EnIBrnbYpNw6pcA67oQt4bltcnTB899WEEbWdTxPgr8Chr7TrSUpdNxPZG7mX3Y9v4ChoAaVN9qQRDf/+9x2jD6Lk5QNzLH6qjCSpSSpy1dVYNyXGfayDfultIzRJGYicYIbYf9JcQN1r6Lg= 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=PtbV7Wie; 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="PtbV7Wie" Received: by mail-pj1-f66.google.com with SMTP id 98e67ed59e1d1-34c2f335681so995193a91.1 for ; Thu, 22 Jan 2026 23:36:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153769; x=1769758569; 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=M1/pgjh0eqe93B8yUS81C1/8Nmv3LHN4Xj0ukdoUHo0=; b=PtbV7WieOxyQBcuj0naF5cnCh81BcSYesvL0Z1j8RIQUTw9J0+v/YhuSn/3cb3a+N3 XbIwmYT0ik13dhMR13ZrCqFUnuWMkgUPspvALAt4mCPeCQNl3S6Auc4DzN97AgIUXOVW ekr3IZWKn4axxnoUCHGlfeOERCgHi4jlwLAJFxCOYASlNLJlGs0RdoEd1ywDfiCqG+L6 xEwLy0at4gwzm5I8bEXmHAp9qe2nPkgec9+fPB3L+sYHTYmDWkrtt0A9ClIXjlDh9Muw 3c5qPDDuxwQo9HIeypLahUI+APRig3M3VmugjWbxJbyas3lDgeC5tawoM3pOYfHZsk4F Zzbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153769; x=1769758569; 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=M1/pgjh0eqe93B8yUS81C1/8Nmv3LHN4Xj0ukdoUHo0=; b=MlYgERL0gZ+Atmw8jkw749iLovtImuK3sPsC6gkAaPAyZNJMTaQ0PFSgJ23Nc7M0Np GBIOoqVTd0ghy0plUBSXIfPVGu5e6hKqbMHErcM6nKhTcEFQEhGxGcx7gWEBS1baBh/3 fSr5zPOe+pZ9Gwfpj6fjNB8V2qnk8frMH2sq/DenKqZ9gD2fJLIt6Tez0IRjerrw0r0s 7W16MRSeWkJfWCWtfOHmD5sSAmOLrQDUwCKjtBxJZwV2C5nYXqCIBEFSx3488XnX0WOf uEoWjIDtiZuVD+6BnrZn34NzoBXzYWzF+AAjdYwe27qOC0KcQamXsWxMuqLlVqiz9L4P qh/g== X-Forwarded-Encrypted: i=1; AJvYcCWE9nNiLR5b3t3re0NBSSoiYbzxiL4/Ha8xKKoPOQkBzKb/HkkNvSd9HsFVgjEtKqTfql19oQc0wPU1cr8=@vger.kernel.org X-Gm-Message-State: AOJu0YzhV/nC27d4HwR/1McMpO79nNW5VkJXp/B3PmTBdpO2AkcKW2P7 DaFVkNXhHYuR6OgqOmeEtFdxS7aJklILJpMJeQZNwfSnvRs+pyh5kb56 X-Gm-Gg: AZuq6aKHMzkPTp4w7JFLQc3WBxIWpQ2LVp5/HylY3DKNFj/NPjzCPZwCgrZmdnMofLP upWh/7YAzdTnHTfn5Q3snQDj8jivLvSiXeTk+PXsSkh6Zws1zq0J+GBipJGYpmk+CTnV3MrYN+e aprCYdiurSewYQlWc62Td6Q+/0sji3RrddxA2lvEFyGhEYSRmHxCRNu8PlpaqWiSuuEY9gVCrnZ uTFfM4r+aaTOzKh9J6BBh35L8yxgWHRhPZL3fxdCdMxapn1DmYbfuixHNBSZWiOCzuOk/qffe6K 6oBBjjgiXywvS5ExYt6jB99Kur11CJproOfSmjzb9zZ9FEnbdstDwYvaMO/Nv3hj8Dw6zI7CHOW E+4rzBI4JHl+DkutBMSn3SZy1HiH0TN1lkMS+9qiHz6xxROBMXTidxqMLZkGtUuwY11TuIWdoWz ygCorf4xVR X-Received: by 2002:a17:90b:35cf:b0:340:25f0:a9b with SMTP id 98e67ed59e1d1-35368f2a554mr1731481a91.33.1769153769249; Thu, 22 Jan 2026 23:36:09 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.36.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:36:08 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 03/12] bpf: change prototype of bpf_session_{cookie,is_return} Date: Fri, 23 Jan 2026 15:35:23 +0800 Message-ID: <20260123073532.238985-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-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 b3f912ad18ba..19fd16697262 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 Sun Feb 8 09:12:43 2026 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73A673321DE for ; Fri, 23 Jan 2026 07:36:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153781; cv=none; b=EQqv+JGgVkOuCNA1LFkGArxVMOTHYjpQDOCoVJYLJghQM225/cREC+Oe/8zvQNdfd2yWMJr+Wft1a5SwlCSOC5ysjvURc5VIlWxzKsW/Eueb+1mbc+Vf+YTwmDlWlTVO2wsrNZmd3hZ/0j0aNoBZo2Joo8/qRQ/u39ju8JYY8/k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153781; c=relaxed/simple; bh=+LohW/5iZ/BTA3wEhODcalmnhVN7Hw9KbOPLybwo5cM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KujiBwRooh6Xcc7mui3L+HzW9UKgwr+QUe+GXcNDlT/N1yztPcMPZVINYs8b42dFavi/LYhRqKgx2cFSyNL6uPV0UAu8kLyd8GglRHDwqUUXKOBsCL7e56O+JOMaV/GJQkkf06H1rU5tvEcnxVm8t/ybOFashi4Yult2fUKTo9o= 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=Cyc0wtaZ; arc=none smtp.client-ip=209.85.210.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Cyc0wtaZ" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-81f39438187so1047130b3a.2 for ; Thu, 22 Jan 2026 23:36:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153777; x=1769758577; 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=zK61mrn2X2UJzXm7UaRNg+WFPm1j9ZsyaLN3K5LWzAA=; b=Cyc0wtaZTD6fQ+1bxDnH6I3L1JM32xAsnbfDk1pO3HPQ29OSS0Hsv1sBzCadgpN+tJ 1U36eNY6l6qviNYwUYZ/ldOWSwfs0FVc6vHVXUeA6pLnT19O87xdc6+/+im9HmsuEiEj tqn63851rBCO/U24NHXgGA77DoEQKhYbU3YwGLxPlVhdy4C3bxmdo5NcRqXrf+3hYX/b oDZWTD/XMN0xZt+N0wY20eNtwMsjIPob2kQhtGyOOSq8dkK0XUZJzQD3gHSl6742rhq8 uGA1NwkG7GFf9d+xKISs741cQoBDDZ6GntKkwEElhinNhl71QJSsL3+aszXzdKcmq32U ZD5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153777; x=1769758577; 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=zK61mrn2X2UJzXm7UaRNg+WFPm1j9ZsyaLN3K5LWzAA=; b=jIyWvmb+l8jyBFQ8Xi7j3oP+rJLXvikjF+hDIPomBK5aENFpqQgQFq/jbLarYBmLSc 4++GVgFLd+vOaRVDcn/XQ4wSU9cXFyalSbixEzUy56bdrDAC+PmG75DC5h5q7MLRhnjA OIcEgSObqskf5WIK+IMffzsahC59ebv0bW+NTdRO+aFeVok1viS2HBvr62UvNj78zqmH ANcXTokFcYu1QvNx9AVi2lZeOc5aKCzsE+gzWM8NYjHMSRYqQVTDN26PcV1P8O8vuFOi FVBPZxweVZjTjC7Ouy6lTYnIx3W/sfieQCF5rfcK781gVWvPYfQC9iUzze0WtF0QyHTu CLPQ== X-Forwarded-Encrypted: i=1; AJvYcCXzmgV2uPA6PTrFllxocf8kxuWRV6uASQzAtayb11476xtk5Ki+pJEvqY5l8IVh/Y3GvzAPTBJnjuDKU2E=@vger.kernel.org X-Gm-Message-State: AOJu0YzLGv1PQMtPjJjgYuPjpJJ5W/0aeY/nLFVWskDU+wsz1jl5uH2K FArU2PErRE2KU0DrL513gDi64uL9CyfBjAML3nANiBop9sJVTuVgiokz X-Gm-Gg: AZuq6aISBpe5uxCZVzQ1Mgekji7kODgdSsi77StwtMt51sqcG18tmEZKm37nqhXCSPA QFAO2t5dK12xC9Ya/wqOg5WXkGMU8oN/ulUTn91pYi0+ob5s1hEsP3AXp6s+BdfOY0xJ3RBRy1X 7Kg2ivTLfIUnEr66ZG5hTdglBV81CucShRr7K0Xb/TTQ+t1XiJfSvhrbecxKnj7MErdvX92ZCNY vq0F5n5UhScoArkAtUKCaEw5FkJRZf0tEYbVKLyldGm7u4fjLmLTmN/1PYwa2x+KuFD2LmuUrrx FK67ux0o5ZY1MHEmuBxREwYPgOakd4Xj8rKNbzVtizo/IjYh9BpGdkHMc2+bc1dkzs7r8GDHH0S HydqSaImsAYtjKbuNxmfjX4ByYjuCluTA6/E9so8X0K7IC73huwBbw5NdGoPqqD/lTzgmVA0AOC DEiCU6CQsE X-Received: by 2002:a05:6a00:ad1:b0:81f:3a05:8a7a with SMTP id d2e1a72fcca58-82317d23940mr1878480b3a.19.1769153777539; Thu, 22 Jan 2026 23:36:17 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.36.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:36:17 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 04/12] bpf: support fsession for bpf_session_is_return Date: Fri, 23 Jan 2026 15:35:24 +0800 Message-ID: <20260123073532.238985-5-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-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 19fd16697262..2ae8f29b854f 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 Sun Feb 8 09:12:43 2026 Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2627231619B for ; Fri, 23 Jan 2026 07:36:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153790; cv=none; b=PdRTqrEZEBDaUs1Pi2gtEA08uzB0RXzgxOFUrDSQwGazAPulu1TZDFYpkhFDHPFdWUs7SDOHxjK3PZTXCHTeRuDtmMU7J50wyhbjj45Fs0q/C8p8der5nJnbI2YYZxUrvYQoAV4S+EqvqiSWAuAP1h1rspPcgay+WYVsUeiYt2c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153790; c=relaxed/simple; bh=vSkpBZEvrCOR8Y3iysu/OMLokt70OFbWQweW9dndaB0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KRV5o04rg6beaPo1CVej5m2qcf0yF4Sd3/a0URWzcIoCcU0LxrAVIQOqYI6boANmUlI+p+PYk2u1fnMzBZac4e/edaBp6cPtfpOALIhZJzOPIJWCkjoKL9r+TcUleG49BER2DLDNo12bVV65TSn96VGx2E6JNytkQyltznxHK/8= 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=Mzg9M5MZ; arc=none smtp.client-ip=209.85.210.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Mzg9M5MZ" Received: by mail-pf1-f195.google.com with SMTP id d2e1a72fcca58-81f4e36512aso2134212b3a.3 for ; Thu, 22 Jan 2026 23:36:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153786; x=1769758586; 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=9lQ/Jj/JIfTtpegaG4Os883WpJ5VAXhTKAEFAxgFaVs=; b=Mzg9M5MZ34pGJVUO9nHsRxwSCCm5gGfGmfAkS/6FM2mmAFSRD2dtoYJBUsY+CGXCzj TrNMI6FQoqt79RLmgjUWwkPWw7GMZ3vCSbGvJna/1x8Zyk+UqWHSca5Gl34GecLDQ+uX 0XINjbUhWVWgrguaegI6adDaujdRkF9HsBe+gX+SQN9iXJxeXDew4ftN5eBvYGy+ITDR WnG+jwgcrTjZhU/BFaciG+ipklJQZiCqd12Is/jJvSxvbjNz4/GAn/qv4sejNcvWojus OMGxwFCFv952kDC6EvwwWIRKWaEfNBn8XR1hPt0yip77NMfUKdJ2tCgTlbqkCJZENvk3 ZhAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153786; x=1769758586; 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=9lQ/Jj/JIfTtpegaG4Os883WpJ5VAXhTKAEFAxgFaVs=; b=Uy0i7mKvJFyWz8eJyehMXacJvZRmfj75SMMLQygY9pVovE6q6Wciu6DQ6krvsY+6xb TGnUeneKukHO3VZvmPgcMB+NIQKavrPJrTYDA2rMNnASb88/Dppzd0Pxnu8/QavHw93k A/HrsYSzZTVgL2+rNqIkE1K1680IC8ujC/ug7VdNF94eYQM/YbAjEjXz2EVSuPD7ExM3 MYxR2NEXAcEKOLAEYKjo4LCeANK6Z437ILNdiO/PvkZNWowl4hljsgflB3TNXrH56Iku 0fAtCHqPRBgUqD9tcfL8YgTSuGv5xC7yGby4Tx7qWYOmkSyJaFo8XOR3HyQuSKXL7U8P BEuw== X-Forwarded-Encrypted: i=1; AJvYcCU8FCEwFGpjnoI5iSUgO9DGIOMII5bDC8Qkdv0H9kg6p2rgmyeW0hnIFra5B01OJMiB93tkoJ45Pg4vPqk=@vger.kernel.org X-Gm-Message-State: AOJu0YwMFnCb6/1O1qgIWKVoAiM/SHmhBJCHfSb9K4SP9DpoRisEao1P /SU2w6cdduy1BhRHGM4HnX6BsEqlmPjr4hUjgRtIJww5xYTBoCRgeSo8 X-Gm-Gg: AZuq6aJvyepjUkeKTbYgHweS5zsxYE/SqNWqmRcth98Ki8OSysVRLVZLxoJWbgbTBpp vSmcgVqb+S88RUZEFIu7tDgGeLvYFpNHDBg7/qbLV9163asY9QqcXL0+1EXL5CCEZK+qL2btQyb uFGG8ake2tB+uEJ0nZnhhWQk71g5ToqiT5LxG4vo4KlLtwPETIN/6+kRypLjDGRnjVCBNUkgpUl L9j+xmgQ2j8GbrEN+aaGS987S0xw7qkFp/kQann8uSUySZXyZEo0J6dgAvsuePxnehp7XEFno3O sMdxAr+CiAEb5QdRg/kl4K9KdJr3OiWABgyvznUsVVvpiXw3tmOtlpJd4Xl5D0J8cLjbrOihbUJ sPVt4AbyKd9+bm2dURY5SxeP7o3snVWv8g6uLTVi9Kjq4zZBmapVkQvDOd4XMq2vOM7o1Ztma8U LMwLKhKImk X-Received: by 2002:a05:6a00:2d2a:b0:7ef:3f4e:9176 with SMTP id d2e1a72fcca58-82317ee84f2mr1955826b3a.49.1769153786089; Thu, 22 Jan 2026 23:36:26 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.36.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:36:25 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 05/12] bpf: support fsession for bpf_session_cookie Date: Fri, 23 Jan 2026 15:35:25 +0800 Message-ID: <20260123073532.238985-6-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-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 2ae8f29b854f..1f171ac3462e 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 Sun Feb 8 09:12:43 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 EE3B53009C3 for ; Fri, 23 Jan 2026 07:36:34 +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=1769153796; cv=none; b=JHqR/EK2YsnMzrjOjEYlHoc8ObuAWN9y/x2wjMXoYRa12XDJgiS9I7IzsghCJlM1/O1rjBY25K72OriiuljE5ibU86bQJQnzLjA5QfX18rtyy7s8IwW2y20k9B7fRZ/DbGibWf/ogO8OtH/lbxT4fbHsoTU9seYccqCxqLQ9xME= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153796; c=relaxed/simple; bh=6fOLPr5pZFj/RQ+K6yXNXzxNF1aapP52tKW6Swnvtbk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KOdgMW5cHZHfGRWtyxoxdEjG64HBUtOwSwSM/8SIK2Ges9loEu8yZovx9fxfx5s9YHGMvFP0mKY5HchiOiMPUv2Y3oHKkLUB2qZ8ZZgIukFdKtQPKuC+Rngo9id4jCxjc4INJP1mdztrFgTX1qQvx/3fy/ZSGYMJJUDCnKQAW5Q= 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=TSX2aH+e; 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="TSX2aH+e" Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-823075fed75so975767b3a.1 for ; Thu, 22 Jan 2026 23:36:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153794; x=1769758594; 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=TSX2aH+eQo/qTm1BTEihbNC/pzELdZetpmmGdTUozZgukN5dWxV2b3cSuSFBBYaz8a wTHa3BvJdKy/9AyOTn14g6zSKbZpcwP5KS43PYMPQ69fVZnNTBQIWKpZxVRzzMqJpE0/ O972XNZp70wnSmz+qD06KvbJ17I8o+AQSq/crp6i/hns1NJ8vkSwI0Drs/3K9I5q4Zer LElU/JAgesR/05of76UwKkVMCKY3uCZ/ucbXHkdjNK09lcB/naMLszs/i5JvihvfBqnX KO2+NXYh1O2oqdIYFleaCgGJWaP8nMeaArsl51LvFzcjfhw5N+xZW6egbGPjvR4DVUNz 56JA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153794; x=1769758594; 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=JQJ9HUB4OaKDvMN5A6jlojl8yfCtbDjwOJUI6zMvzjjtgSaRSFFKCcaU8kACQQOhaF Cd8nHwEBDbMbTADihnx5k4+88K2p/0RUVRMXnKhq6TEMByuKehnSlCujjT3kRczeS5Kd 98Wz4fnbHx2zNGmbSHqOfAJ2JWA3ZFHLXq/lk+uSk670Vo9+LuK4k+2VOKuANoGOg4bD xzCsOQ1vBf8YrGLjb3XyXb9A8UNk7dOhTIz+p6m5AuFrMqDKmXvLjFkUixKTGpRzqfj1 BLkDLp/MYViwL7/inGsQ80UigdQ04papMg0JYMzcZ67TtrZAgYEjHE4HBcMGHlf10Ca7 BsXA== X-Forwarded-Encrypted: i=1; AJvYcCVvJTjE8t0P3mwIk23r/pWSJbnpYSpvSxzaFLlSbf4PxZD4wRQluSx/RsqMZwWAAASG/DkhHOLZ63jJdls=@vger.kernel.org X-Gm-Message-State: AOJu0YxfL4xst41xhYpLVL2Q8AvBfRVHTwqmozp1ZclbphubmBfOUWVz kl+NbtFdLeKVLz7rEkUgKh/x2JLASWYNL5QbBzlbIRmMgLzYIlYjGUyK X-Gm-Gg: AZuq6aIJxxKXz2tTSZd8QOUM4Nycp6E4GmIMnIOikQtT1uFkTHPH6GuQDDZirx4NoBX JQa0TY04vHnaptv9zUTS+t7SRIyZ25rN0qmId2QI0du9k4LmY8Gbh4vplxQW+IpEeAeYz3q+Tra 6BNuvyWedGTubPj6z3IF7j2FK6KxvfKVX9PEJ7n/h66HtSpISQ25hiVKHrQ2BbHiVtziEdkMF/0 7kQdO41igsscTdMD7eha2yQjc/W/pMS99/9Xx0Uy1EPYWP1mslf8jgGsqa+71iuoy2jgmFZpT76 dUd7LuAIMFk+eYqdXXQLsohe/UAnhRUqAirItAjbtbZCKOJ9v5Rkgrhe1CtjwD6KQPB7Sdkr64k cVA4+ce+foNepw7/6OV9yUg4ZIHLx4PbqAlvWVlRm0Qljnvac+jZ6Yu/DL6vaTk3h2de8YIw00q 41FN3PoYVR X-Received: by 2002:a05:6a00:1825:b0:81f:804f:af26 with SMTP id d2e1a72fcca58-8219ede8a3emr5462181b3a.19.1769153794191; Thu, 22 Jan 2026 23:36:34 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.36.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:36:33 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 06/12] bpf,x86: introduce emit_store_stack_imm64() for trampoline Date: Fri, 23 Jan 2026 15:35:26 +0800 Message-ID: <20260123073532.238985-7-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-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 Sun Feb 8 09:12:43 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 3913C314A95 for ; Fri, 23 Jan 2026 07:36:42 +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=1769153804; cv=none; b=bNjBB27B3/gKBUj0UAKIOFBUjCW/CZK9roKfnaoyYQsPEamrv14rdbEMswl6SzGBcZR9fwSvCWLb6QlDgiN/o/yF0G87bPc09GjTmX6J+spJyP5539s1TZ1g9PNY1s+1R0U7z72vdh637quzX3Pp24etd2ZWKqiQ0yKY3iqximg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153804; c=relaxed/simple; bh=EjnGJ2RP/1JCMlZMGRd+YlmPnDkDXdlwIR1/R/iLIq0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sQzxcoYL9KveDjgSJnmvM6Pd5BQ1HHox8JjXK9kFxLGa688TF7W7XHE3JdVBsWFTsVsvMtbEVVdADvQVy/WDWvltxit1KIgJHLqMHhIyc8qdIt7qLN6wjTSBcmkdk8YsSR9elIDuYibOk6PbBDRwXICQJ4tf7uHpBkzREDFjNog= 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=ehBnYl5D; 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="ehBnYl5D" Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-81f4f4d4822so1025361b3a.3 for ; Thu, 22 Jan 2026 23:36:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153802; x=1769758602; 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=ehBnYl5D5LAYfo69BHwiHfRDXqKkvsFFmZvVl9HEheKQJbu/WwTLTt0Xk2FzlgFvD9 VlBZZOWfkJzf7brJORXTwaPURO5ySJ+3u7ICI7ALvqmrPbqgxqRwNkYhRF2GRicDEglZ ggdBdjLOrYZgugAOAPq82KrVgJ2skVq2y+anStGs8maZc1h+01nvVWwTFbl/Bx8mx+j6 hvBQFNVVUaAzjmQ5r9ZlwXlYdemevZ5dgr0uWztB89pSj5POm2JZkOM04w9Po2mtrbWk Psq33nyTTy0x4nGquCU8+RCr2sueBLMD4VZ7FNSqfDzROEcTnQpW4sCW0XZl2jYMYM0J LeIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153802; x=1769758602; 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=EHu4HMprYkSVxxK/7jrNJJXn4KAsowjz/rRMpQIwSblxtZRMcSEmdDXL7H9vC45onh C7IztpFWj8/nmxDSFFIGvyURK/yJ4LF3cnGFDLwpBXJzeS98/Fshwyrovp91N8Qk8Y5B bk4RtgRv17WB7h6/w2rDqM5BucSni1tyuvjWdIT4sgrNN63X5pT3zzUQ8aWnCFZWjS4W YabKxxv2xp77UmaaRCsFEMqahJnLjW06gJ8Gi0SaQbe18QB+GZ/GELUmu5KABiR+Dk5l mNq4ERyZ1ip1g+WbsbmfVM0C2PNf0CPX0Z/spKlcLtCGhaITrvIm5PqRiInzVMcffCe8 oG0w== X-Forwarded-Encrypted: i=1; AJvYcCXSbPF190g5dxhV5n6hweMAgwlfREmy9xLY0TuztqSMLf/i74g3uzX1r83C1pLcusH9kAP6Swfp/L4hDLg=@vger.kernel.org X-Gm-Message-State: AOJu0YxK6OUY2WeUtUWVTo3YGYYCq92MR5HIE3EAhqyp11YjAPFOShZJ 8ymi06wNfGk8nonmMTORxnNyHOzFJiYALcxACXrxq78oa6gyULIwbR/f X-Gm-Gg: AZuq6aLexpZAAEDuQXuDJJeE2UGehYOyGaPUYUcYtEVCeDgyPLV1jhu8KPXNn8TGBLk BwgiZtT6vzoBah0HHqHmpk2Z+2MYg+oP7XL+TRwC/Gg0boSWxxpv79ugVQlAZ0h0mnBDSVmsT7n 0uDr6/bLtp+6FMwzKlAz2Xa0XJOLBHyn4NzVGz+mtOOG+yO8MCJwTO1zaSpYDGPOEvRXoZw+3og DA+sviAwZhu3BEHhFcWh7gIqYauhG5FbMVADefiJbHlApERvu9Ewhf2rIkOZPyIhACeAM/Ocbf7 zI6J4MxVkkm/xg9rLxqaEtFPQJEA3Tedzb5Zsxvuzjr5/GQS8LQeUrttQNBpQ1FVdGnCCF1X7dp h9aVtTWbnT85K+6EeorbwRvJqH9/HgUiCxOX1YvFlIfuOiZD+MwDuD6ub5QoTRZ1Ta1b2O+phmC xKwN54LTIY X-Received: by 2002:a05:6a00:4ac7:b0:81c:9f57:3090 with SMTP id d2e1a72fcca58-82317dd882amr1651384b3a.24.1769153802384; Thu, 22 Jan 2026 23:36:42 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.36.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:36:42 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 07/12] bpf,x86: add fsession support for x86_64 Date: Fri, 23 Jan 2026 15:35:27 +0800 Message-ID: <20260123073532.238985-8-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-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 Sun Feb 8 09:12:43 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 2BE6A31619B for ; Fri, 23 Jan 2026 07:36:51 +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=1769153813; cv=none; b=rm6RpHWWzY3WiqIth1HJjAGTFXAPM/KKTQDSCJe2GvlBLNOcYeV9Jzx4qxA0IK07BMXaJRE7AVXN5ouKdz6BalMeWkXDmJ49TwYc4vIOnOe7+VDpLLXG8sIzy0l+TU2Eb8bT1YJIhDsnAZQx1414lWfczdm5bayO/j9eKE/xqs4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153813; c=relaxed/simple; bh=7cC1ms5ub9SS0bly7QzzdjNJghADRqDQHVSuwXZiOkM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IfucARCHR3BiTmYUuyrGew/ffbHD+j99TwC4oCQTp+57M05XVAePL5rBL8/XqvLbaYtbWi9KCmXTh/J81X0QwhG636bnaRUBP55qSJ/jJZPJlVa8H8qWW44i8j1AT0MW1EOg1YNFfXYfXzIh9qcSkS9/zdVxM2pTsM4YyFFtd2g= 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=HQhrHOIK; 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="HQhrHOIK" Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-81e8a9d521dso1121156b3a.2 for ; Thu, 22 Jan 2026 23:36:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153811; x=1769758611; 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=HQhrHOIKI1HpgGhW1C4/hYqk+pyPGbib312/colf0oNZeKvi2aQrTu4AkNjQIGya5T L2pQKJAwNp/ZGzSiKgNUlC0WxQsvUdug/WpuIVLPeOM4rHxUo6WcHGA5x09wTy7/sYCb wfA283H6WygQN0YXvlZWrSarIC3XXdnABrlozPgvzzzyJwvHNhhxnzqzLJ6amIoQirza yyiTcWRg/5v12paT9ZR4o70CItBrh5qKe8urBxBIf/QeCFGSD4g9ksp1ae2epKMG7wmT 3K6Mw62EMRq1S3huYMw8turGLvf72GienPWTgplc9pvMiEGdJHBLPsAeNY3/G+ECPCM4 8wFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153811; x=1769758611; 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=PhmYNZpOG4PbAYVO0POZzelbwGD02mSfsrpGl2oYW6YyB1upmqbAggPWB0u90QR6eg Dq3iKQU2NaPJkQY6SxZAZMo9FUVpuDNdIxgrwtfkbYDV38h71q60SibOjvLwedasc62y vPD6QhG6wprRau2nNZokIIyB+B2CrmMEUuSlrWO8q6nk35G0ztREFI+SahOxELyArAkx mV3FbVSptxTVEuoQEdMfa/e6oIgb66fPxkm9qpIpkQv9CfklaWjlF+j9VQBpVCcUMlrV GpOyFN3PAeFvNcqpZanBSe9BzuV/AwWxZDn35jrXAWJCRAcjw8FcupDiRhNrdFdFc7FS LbuQ== X-Forwarded-Encrypted: i=1; AJvYcCUNYAzswPu3zd0tQyyyoufG9DNh+tOlDQF+OLIrD+SRN/J9ge/SlDUF2DgREgZlx0EGW1KdALlDnQpZkR8=@vger.kernel.org X-Gm-Message-State: AOJu0YzGNWZ75B5RyghsEukcZAB9qPLW4cgLYQHVIS8dwpZRmEHk1tRn ylI54oc2QuvhJI2Ykbc0gWc25SVOS27t3RwJIXIB3UbDzYORLIG/DyGh X-Gm-Gg: AZuq6aLuw5sD3CO9YF1+KqbtT17LAzNTTxgJO5k1enNo8b3QYINZTSjuzFOVYX2e4aD b5s4X7PsSM/2ZZYxVVtak1OlKYL/L3nvTXFnZs4fiduh2ogVB1f2qHdjsAI2jKs6StIt03qselK 3ir1w9UWtB7o6EXpFlYS8zZShxlDHPjUFux3ctBKMaRdwjLRnNI0k27l2w/tSvZBFc0uxKUMAvX HpJTZ0UPUc7nVi1kgqSCo4T6iSM+Sm1RdKa76/vAUcNewZCgIQFiSuG4A6HiYY1+uhxLX5kV5Ow mtU76cd3fGP1U5WQ5K7jI518IL7MPD5NKT0WFk4ZeaPfGH0xNMvw579/+coITwKn4atAHoZmAA9 QGErdEhZDhEtxlqqSttoYvBo73QGFAs2ydKqGIRqmSIvRMeBlYToHrtojHyUZxZ7nJMDgeW3d0W lraC7AZHJO X-Received: by 2002:a05:6a00:3cd6:b0:823:8a5:297f with SMTP id d2e1a72fcca58-82317da469cmr1995656b3a.16.1769153811409; Thu, 22 Jan 2026 23:36:51 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.36.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:36:50 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 08/12] libbpf: add fsession support Date: Fri, 23 Jan 2026 15:35:28 +0800 Message-ID: <20260123073532.238985-9-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-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 Sun Feb 8 09:12:43 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 DDDDF3128BE for ; Fri, 23 Jan 2026 07:37:00 +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=1769153822; cv=none; b=Yl15ZuC5wl4HRptj9vhRewPk6/r4I5Y3ME+4xJqa+PjKgcXNPqHeG+GSFsOwwgYeIuwbMbTba6/OuFuYz7PYm1byRYC1eZHE5G6AZPDcBGrH9bKB0ZSGEPswMoh/E3gPK1ZQyIlHdw5WZh173Dd6ZYppjLd8RzVElPwH+uZ3Y9Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153822; c=relaxed/simple; bh=pPH6IGYSvT73W3XnsSk5F+V+bv692q4Zq0EDWpqk/mQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=svHpPHkeeJImjhTpP2Dh+dg3yGN3YIGU5TtdmPVytPCsBex1q7Jjd5WO9zGHq0HiAi6yNzdkue6ULVbYoBNj8yivY1POT0Iiv0g//fvAm9ey+fHUaFpE6PpmWb8cM+vQ3OzYtu4bxWF04R0xUBScPBY9ZZ2NgJ3Vc1w9dYVU5no= 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=Vm0+fqpH; 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="Vm0+fqpH" Received: by mail-pf1-f194.google.com with SMTP id d2e1a72fcca58-81f4ba336b4so2090312b3a.1 for ; Thu, 22 Jan 2026 23:37:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153820; x=1769758620; 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=Vm0+fqpHWlEa2M1hAWoc9wyZcQl+HMEfYOUmXMKu/0JcRr/8K92M2mH9/A+O3FfeHm moFr8zJZgMZLQOP3uH0OppnTFpsVWGMV3qCgDUb7otpHQJ6gy4JDMPlp3ucLeVbVk2lg J8nZnxX5a/+7+QNkXtJKNX7HORm2gkiygY1LfofMVgFsSxRZAv9UGHKTscqCGclkHu9H atp+gRwiHrtbtArlApz7oxhleB4h9HE53LORlO5syHT9wx2XsQUZOPhaCBavdRzLME5a 1hybaCeuKmtcZnIlOpmbN1gFJxtARI5UPYMWNgN3sOXwPMsxMyIsGO382ggec3+6yXnH dnaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153820; x=1769758620; 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=t6MJR/Eoj2wOXwTcwdwX98czTHhc72SXcdOUngJHnssa75PCjJL5Ct9HzRN99zjxiO D/0pSzivylRzbjoqZPnVWd+hENfG9uzVLnVTnDCFcg10jkwuu/qKzqOrxIVWsim0QgtV 939tCCpqSB6puL/zJCisi7JKBJOqlZ4rblXtyfsqFSkbCEMuiIEV2iNhIc8M1jPHzzmT rEwpBnl1CuCCJZz1EXV1+cyZRX/0OkwcW5hp8hUKAUqP6x+Bchc5SAMat80GYfMocUIl O8zmTtTyVIhsUSuoc+KTDg41rj61fDofTXZdeb87pxac5C+l2iGt89stoXOeGDc0hn5X 9KOw== X-Forwarded-Encrypted: i=1; AJvYcCW5G3PB7dYy8yjgVyyfRc8AWx8V6KuG2+jumdStuAD95USCwbevZk9jyvRUq9ZFU1caDaCx4ZGsSJ+ff24=@vger.kernel.org X-Gm-Message-State: AOJu0YzB+MHR9u8i8Be1U0EzbvQz37o0AjSVjGDWC31l1A3yNd551xzL FmL2RwISmE6vVnzVDlzi1XDY7YWSx3lUSkj7kNzw52MMe3UY5O48pItr X-Gm-Gg: AZuq6aJNqJE7q3uWFET8jtIEQS9F0dluL7Y6BMM3uMMCw2n0/g7eyYVOF+knM4hwc+0 hVkkmnQ0yl81YFm5A00EBVO58yYyP2uSnssndk9I7cUwpcaTwO15z4IqollTG57K7Q22ed1AFn2 Un0mRpbpMzxn1lau9+91n9qAtgU7QxShKMqQsRB5ugNbKzpsn5+vyjSdJRgloNuGUecoKK8he1b tW92Jg87829vnH9HVqCZhhvZqYMeBNqzO1xGIwVht3tWJnvD0FoseOXGL2PByx4SNU5uMItWCid /2M0qXLJPYZSU6mBgI/56tkjIL62tSbzmuq9HQ3NCHYYtkH0J8r1cqzHyDAbSsTKdJBBb/s3fCQ n2VUwAiSyJbSgy5tCVvRSKSeW3cUg2Hxrl/1D/Sj8G37BiUpa4vYzC4ijIy8AiEO10VE/L41Cq7 bT08bI+r9H X-Received: by 2002:a05:6a00:3c87:b0:823:bbb:76fb with SMTP id d2e1a72fcca58-82317ecf202mr1711766b3a.46.1769153820320; Thu, 22 Jan 2026 23:37:00 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.36.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:36:59 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 09/12] bpftool: add fsession support Date: Fri, 23 Jan 2026 15:35:29 +0800 Message-ID: <20260123073532.238985-10-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-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 Sun Feb 8 09:12:43 2026 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7EB38318ED5 for ; Fri, 23 Jan 2026 07:37:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153831; cv=none; b=jOTGcmnP4VTQTWXo3TWIk/j1LrzCNDbKGnTeeb2u6AEpkgZlFWc9/Wz61nWlQFtQbgyYHZ5WgOiembdTAQcFMh7MpdgG8ymEwbVAYmV+vVBP1pJ/lmfDjfLx8sr/v2C3QfsNQfTWg8bmkSk7/o0B2T736OawYygt/LYATbt4qv0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153831; c=relaxed/simple; bh=tNyw0RMF3OxHkN5cM2BejvwuZpXkAcKTmu7JJGqwwVg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HiExmq3RdEH7B9XOF83J3gtZI+LNRxLGd2s/O8AZvtAd6FGParQCsp9HZ/g57mzaaZ1o3M/fVD+a2t050ih3n/63dqw0+OX82z/Js03ObJgHyKHWvH3QCFbru4gLwlpS7pIG5XPW+OV3et7vy+PoxpOLszATl04upaOzFujvMGo= 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=Rg4qzk67; arc=none smtp.client-ip=209.85.210.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Rg4qzk67" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-81db1530173so1031620b3a.1 for ; Thu, 22 Jan 2026 23:37:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153829; x=1769758629; 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=tlyqjJg45w/WwCBTFkaauQNGPumY1lkyqYrB1pbejjE=; b=Rg4qzk67bP0dkMYudgynLaCGlPyH8hZKRnUPqpFj138wcNsEPrjuXMOowe654JLRJA gi51PiSPgyg/6ognu3CLq+KwBUyFz8iZb9YmiGs6DVLT825UAgz9a481nmjmFe1AWj8H QBK2z5GxpZeTi85fmPR49pLT+6gpWr3YD3fJweFGfkd6N7wjHY3qIZiZjCZze8UJPija UFIcllh/0zTCOfsB8IrPBZkox7YKNEcywoB/eoEJ67q7obJYMUNCxwcpQuCsVOst84tu YST+onGjWxabUcCsmhdf9UPh2fo8W0H9Jx49rL+6oTztkH0wwyQ0qbq9xDrEpXC9arcR UUBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153829; x=1769758629; 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=tlyqjJg45w/WwCBTFkaauQNGPumY1lkyqYrB1pbejjE=; b=CAb65ggCs5j2khTn2p7W6cDprEFTyr1VEGWZMxwQYXL60duU0U7aKcC4RIRALccb4E UIAB3ID+OQKEa6xAJaTMFgGocadDS4PufDvbHCmZnu55sRDBKcmixjTqhkglo6RProDK ftHjvDWeRRpOX1oUW04662zrpAUepcbcQ/o9/zFR0UHbzUJBXhl+5RWBOalDN4YWXM7S xTyue57t9NjOC5jF1ljVFg3HYOVI7EOc1pn89rPV4lEtKOJsaqHgS3/xDcGLF9Up5ZA/ 9sMjFw2nK/7ZF+2qiuywj0eY90Tfnykmn+Th5uGK5CHDFgLGxPVZ+/+c4Dz9PZjUjCQA NDMQ== X-Forwarded-Encrypted: i=1; AJvYcCXXbzCJkdOEZ4rPoRvKeD3KTIHt/7HVkRmkY9gtkqUARPzwBiVlUQsUiVYEFVMhaVDOJZ0NxpHemPhR2Qc=@vger.kernel.org X-Gm-Message-State: AOJu0Yx20SkoqrcTld1oMBpLTHaFAbIwpSZNDaqzfBo3pG3phpmVZpQq tIj4nh4Y/YTvcsLPC9b/Azb/XHT9YDMWDMgu0Vo6X++kkQ++HfBktZdq X-Gm-Gg: AZuq6aK1bDCC3ly0XiblCHB1paIGQCgUTCrulEKugoQJBavIvRsddfjM4koEodBjwrI 34UK7HYGt5SgeE1vKab9b6ubnrpsCb3QYj6KAt/u7XNKXEG5++rbkTcRlE6J1wFWEC7ceN0Ie6e XDny487fK97iB+iP4ONHA2sCNz3DqRl1S6/ZeFEhLk2y9qzwFbMQA/eLUvFlq5glkGuhzxreZEE YDwGjv1pYa8ofQajXnqpprHl8lq5VSzik+0btxjBINBgB9cBaXv8pxRRo02cK7WGIE9d1T9XVGR NLeAaz3ZmYtp+fgJAe5Nm6KDS8zN6p9vT26x1+1vF/3kXV3DovRbEtyLlmQnEkc3rDKGDW1fXDr NEVB8CgivdDkSElqC09dQ0XQ2miwPxr89hXcRUtnZKtCyQk+L6n2PZRQgVjgKxq2jBcv6f6w0OU 7UyfldRGuo X-Received: by 2002:a05:6a00:37cf:b0:821:82a7:4ec2 with SMTP id d2e1a72fcca58-82317ef21dfmr1685523b3a.63.1769153828843; Thu, 22 Jan 2026 23:37:08 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.37.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:37:08 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 10/12] selftests/bpf: add testcases for fsession Date: Fri, 23 Jan 2026 15:35:30 +0800 Message-ID: <20260123073532.238985-11-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add testcases for BPF_TRACE_FSESSION. The function arguments and return value are tested both in the entry and exit. And the kfunc bpf_session_is_ret() is also tested. As the layout of the stack changed for fsession, so we also test bpf_get_func_ip() for it. Signed-off-by: Menglong Dong --- v3: - restructure the testcase by combine the testcases for session cookie and get_func_ip into one patch --- .../selftests/bpf/prog_tests/fsession_test.c | 90 ++++++++++++++ .../selftests/bpf/progs/fsession_test.c | 110 ++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 tools/testing/selftests/bpf/prog_tests/fsession_test.c create mode 100644 tools/testing/selftests/bpf/progs/fsession_test.c diff --git a/tools/testing/selftests/bpf/prog_tests/fsession_test.c b/tools= /testing/selftests/bpf/prog_tests/fsession_test.c new file mode 100644 index 000000000000..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..f504984d42f2 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2025 ChinaTelecom */ +#include +#include +#include + +char _license[] SEC("license") =3D "GPL"; + +__u64 test1_entry_result =3D 0; +__u64 test1_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test1, int a, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test1_entry_result =3D a =3D=3D 1 && ret =3D=3D 0; + return 0; + } + + test1_exit_result =3D a =3D=3D 1 && ret =3D=3D 2; + return 0; +} + +__u64 test2_entry_result =3D 0; +__u64 test2_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test3") +int BPF_PROG(test2, char a, int b, __u64 c, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test2_entry_result =3D a =3D=3D 4 && b =3D=3D 5 && c =3D=3D 6 && ret =3D= =3D 0; + return 0; + } + + test2_exit_result =3D a =3D=3D 4 && b =3D=3D 5 && c =3D=3D 6 && ret =3D= =3D 15; + return 0; +} + +__u64 test3_entry_result =3D 0; +__u64 test3_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test4") +int BPF_PROG(test3, void *a, char b, int c, __u64 d, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test3_entry_result =3D a =3D=3D (void *)7 && b =3D=3D 8 && c =3D=3D 9 &&= d =3D=3D 10 && ret =3D=3D 0; + return 0; + } + + test3_exit_result =3D a =3D=3D (void *)7 && b =3D=3D 8 && c =3D=3D 9 && d= =3D=3D 10 && ret =3D=3D 34; + return 0; +} + +__u64 test4_entry_result =3D 0; +__u64 test4_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test5") +int BPF_PROG(test4, __u64 a, void *b, short c, int d, __u64 e, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test4_entry_result =3D a =3D=3D 11 && b =3D=3D (void *)12 && c =3D=3D 13= && d =3D=3D 14 && + e =3D=3D 15 && ret =3D=3D 0; + return 0; + } + + test4_exit_result =3D a =3D=3D 11 && b =3D=3D (void *)12 && c =3D=3D 13 &= & d =3D=3D 14 && + e =3D=3D 15 && ret =3D=3D 65; + return 0; +} + +__u64 test5_entry_result =3D 0; +__u64 test5_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test7") +int BPF_PROG(test5, struct bpf_fentry_test_t *arg, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + if (!arg) + test5_entry_result =3D ret =3D=3D 0; + return 0; + } + + if (!arg) + test5_exit_result =3D 1; + return 0; +} + +__u64 test6_entry_result =3D 0; +__u64 test6_exit_result =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test6, int a) +{ + __u64 addr =3D bpf_get_func_ip(ctx); + + if (bpf_session_is_return(ctx)) + test6_exit_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + else + test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + return 0; +} --=20 2.52.0 From nobody Sun Feb 8 09:12:43 2026 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2ACA13321DE for ; Fri, 23 Jan 2026 07:37:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153839; cv=none; b=YcRM3MWL9dPfCcsjZIpSvVro8VXm9E2nEZRtXEU/ZNlqL1BiyjPHWPodKJePHFjjLnd7Nil+eP6F3YsIEPVEAcwvhtaXxI+oli0iwac5ArOMU1141E1/wkjPDgcmrRBJeUjsTerY5vWE4TkgJMA8PRBvXD3uK8bQhUAdeZr37CM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153839; c=relaxed/simple; bh=EI3S9m8lXbyfiPr0rXLXLlNg6jz6WDFgZ7OGN3ndRII=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XlU0RGX10GGODqFf3Qs7t5TvIltHIOtkXWUQtS9D9FyYeeKv25HWfi/TRueQ6wSJaD7SSKDljprYF18xxLIFX9fdO8g/1YBshT3MnDY1+NOJBA7TNFNN1h5I33ydE7lu4TUNxWLodcRcyDfmbaCewuLVy5MdcS3QcZGm540MdSo= 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=Yf6ZOjya; arc=none smtp.client-ip=209.85.210.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Yf6ZOjya" Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-81e8a9d521dso1121402b3a.2 for ; Thu, 22 Jan 2026 23:37:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153837; x=1769758637; 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=aFdyTmkIAkHsLaNZCmQPSpqba17vOR1m1y1zTk9qCAE=; b=Yf6ZOjya3MLh1Xnf8W/4FwtFVOx0M9nloYnBpbgUV9a/nn/8AIdt8kazT39oICvmqe t1ZvEjHycHixxkAgt5nG+5zGCyBfZhvOt2yNrIJwgwusk66fCVlr6y/PVfhWBOto5Lsf 4cooazDHMB4eiR3z2T5MoDVvDrLpyp3m3W1q7we84QrMDEoamAfO2tDmF7zOEamdfPHA K79m6LGh8XpGXMtKmAaWWmUunYjCaOJCxENZOmLrf+0OHV+WE1zJXy6FcaB8U1hkpsVG ZnGkHAqPrNYfwGpjuf8JN9y6GI+wTA+hBAZjHVsOVgKW+6tGAG9KEEkVB2UJ+7Wrpw6T DCRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153837; x=1769758637; 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=aFdyTmkIAkHsLaNZCmQPSpqba17vOR1m1y1zTk9qCAE=; b=E74VeozYYzJ30tnAw3kIujVwOrFWwyXZJNQBl6AwD0KxJEndeQC21dfugOKeSBDoGL u6LsZm0GSd3/OOxGzE+CP+GEnqisBAVGix0U2nYIdKJBY00BUER0sEFOKA6bsIqrBd4k 19xD5HPr8JnMm1ACpaJMqO6wsyCfw8qPzdofZPyvVzd9d4HSCOiJU6BHc8wDH3rKC/Gd uQDX/KxKsMfFTRpaF1VO/zoPvJef3n/scBpTL/F/8rAuC/Vv3mUyDV6PBiKRlLOU35CN gxB/kRLx0YfHT4oLSyTJjxSUs+9sv4cpsLzNXL9Yv15vvlshePdjyJ4A/76AtFgxAlGs gqiQ== X-Forwarded-Encrypted: i=1; AJvYcCWUTxkVy8QSBNbdChdD3F/R/SrwfSBcFiDqQf6rm8nUNspj7+ngH2G9qx8ZtpmZBh8WTKOzM6uv+9ft6Xw=@vger.kernel.org X-Gm-Message-State: AOJu0YytcD3FrVwvX/Smgg9O1BCPZdzy0+fpl+YwF4qHJYwvVgKLaYil QZiW6xFeNarRZo9iafuxRKnA9oDvhykkfBDJnHEX08IoB2MdIEPmlBgN X-Gm-Gg: AZuq6aI9MkPhfHIJbgdLQ3YX72Y2UtYlbIg0FXt4pX5o5wTSrQUj6jHOypOHp2gxxKq HhkUTKBdiQf5BFG/H+X8fvbLnbXbcP/gjc8SORfQ2N9YMD+mMBiaZUhg9I0pj0GO/AFhQcvw/tW SRYLygxhPMItyJ1XaHt8jk9Z8dk1+nGnZtntLR9GpLLk2atgJC/jeOe0ETP5e7ZBn3oeAKf9wKs z0CixvBjMKKT0LubJfXLgyQI1BX6w+Rt1yA5GBQUTWXePtZDREJbPhJP8xXID97n93QAah6sYZb CBUAXk6DC6AztTtmVYfHM4hM59Qe8rsf8xg/qesy2k6iRkzaX9aahB16fJhdqWNBKltF+RsLuLL ff68oAhLomOejwXJB+/uoMvGDqZpCTTkeXpf8h0bQjtN3ewyy6jkO42n9uXMUEW2S6xHdE1Vdgg J+pGxgP2cv X-Received: by 2002:a05:6a00:1c88:b0:81f:82b2:ecf8 with SMTP id d2e1a72fcca58-82317ed8d49mr1870818b3a.63.1769153837561; Thu, 22 Jan 2026 23:37:17 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.37.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:37:17 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 11/12] selftests/bpf: add testcases for fsession cookie Date: Fri, 23 Jan 2026 15:35:31 +0800 Message-ID: <20260123073532.238985-12-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Test session cookie for fsession. Multiple fsession BPF progs is attached to bpf_fentry_test1() and session cookie is read and write in the testcase. Signed-off-by: Menglong Dong --- 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/progs/fsession_test.c | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c index f504984d42f2..211332bdcccb 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -108,3 +108,56 @@ int BPF_PROG(test6, int a) test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; return 0; } + +__u64 test7_entry_ok =3D 0; +__u64 test7_exit_ok =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test7, int a) +{ + 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 Sun Feb 8 09:12:43 2026 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BCC89334373 for ; Fri, 23 Jan 2026 07:37:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153847; cv=none; b=HI/PbglwKhbo7RC84ROdDxHjxaDNpTNty8dP5ZvyLYDdzut2wdugmIGP+WpOlYM7fwGQJivJBscJBFBf8jiVwYlbSZyrxs9qCJQBabL2Xt0dBINu3U15jmjNQg4pcqXgwErSB/F+nJHxzmQQSV9qdbRwAK/8jedflZKFsPvFrCk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1769153847; c=relaxed/simple; bh=mSDxwBVD18PlqYhebUKPcoi11BSc/00xy3TAGxUREuQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lvDmMq28JszXob5BvSfrlophsxiCI9Upky6gVz31VVWk3DnQdSB14fFYhvX/E9YtwFSnZlMR6Xnzo4uNfZ0OVJUdiI6BtAvxk0Lt8YiqvD6Yh5HmrQpMkf2wfY/ITXEwdiCdKG/+LDsSflYi7a3EWy7xEYYRAdTmM68t5kA1QFs= 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=l17vT96q; arc=none smtp.client-ip=209.85.210.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="l17vT96q" Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-81f39438187so1047586b3a.2 for ; Thu, 22 Jan 2026 23:37:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769153846; x=1769758646; 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=l17vT96qqwHbs72Ym+kwBHiOjfu7n30Z2pRTgJUN2R33YQbfV5wTbn1GIrGad4KkRW Is38vaf7kOxzDUB/MwsT3BdICcxC+bfnDc43umjxIYjyc7PCy//+KB+mZrz7QbvyIKMw 9MBT6LwEZlW/K7Mbk8fsgNJ9kjc5W4LTGRkTcfgXXENiLGm7XGrPydK7WpfL/GrsR7KU LQTjELHhp30SesMZFHiZBe0837JLvUSq/maAzThLG7ZbuA6FPk8lZewFIzHMJCno2h43 RXDCVLRNZMWK9JMIlCG6NGJVcYAYC8pUVbFvSFzQtE+tuwPLN6kBlRgSEYkClHxDtARU kGpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769153846; x=1769758646; 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=X7jbGn1ig9uKTYj3oFsmlNjY5Ho1HvtusO2rQivIdMJjgAiEQiFpsl4HsquPvY2Khe /EoIMx6XWotWjiyLv9YodLqc0nrzAZg+Nz90WVAzDl7oLZgGwwfIhlGraiI9uXAmtZyV XzrIfs4ksGRV0eYfaUufKZFHyAx/1oz06XFsExIKpmSd6jn7658GsvIIg/RMwjU9UwYn rh8iA4l2/XPdnoqYE62TfG5SLgtPI1AIYTENJL9uYCST8XLXmvg93cKyMuik6sHp/CmU 7j73x4u3j92v1YgjraxPM+P4SUblO02I2Kpu7jp5uoSqRGkLcchQkUNPn9VE24emNIP2 zdfQ== X-Forwarded-Encrypted: i=1; AJvYcCWRbk2N1b2WUzE+UAAs5BT5C7n3Oj0iIrvOL+MMHAb2I/QmPRSJ4c86teuJ3EO+WynaujrRYMp2pbVxy1A=@vger.kernel.org X-Gm-Message-State: AOJu0YyIztl5148ytjH8TIfqQuIS4JnxfBJibFra567vcau9BdNFyiVP O44y39Wh2lr0l+Vepsua+M+knMul5PSHaNmewoFK/S+CwdwVxSNLSBCO X-Gm-Gg: AZuq6aJVLKEYfxorX4EObCshKwYtjzXeTSyBuBcXeiz1GjdayMZAvtebCUgz+eLTuFv DHzK4U6VjjRiTWl3+lV5yqx0AEUFUIn7EuqSbcgLTKhbiv0naOt4/aQ1ZKZUW/ZR4w/dcOtoyCQ XnYEMCp16mN6pSiunz22UoNoaJ6ZYFLSOUCmeKuWGQkgK/u9AsiIe02uOCet2rjDPcq8VJ8HbCy iFFv1XI96tYInMyeGCtleiKZ7KwuOd0bf6oRzoh0VTzgPnG+umMRUUQlChpkuSrgysaOVk2CvlK 84ElmBA0Qr/ulrbmiZARHJe3Oi+2WO5KvVd9ZucP9mVpXWH9UrX+WYqh4OZnzOkK5fWmlPHr8HB lgWZ7snhLdL2uD081YyT2BglTmkt7V0Otb2qvSamBcsI1VBAOXbThUFtur0XbDWWpqpL9DfxyE5 XEWEnVjdBf X-Received: by 2002:a05:6a00:3ccd:b0:7f6:4922:89c4 with SMTP id d2e1a72fcca58-82317e4497fmr1780587b3a.55.1769153846166; Thu, 22 Jan 2026 23:37:26 -0800 (PST) Received: from 7940hx ([103.173.155.241]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-8231876fd1fsm1334205b3a.69.2026.01.22.23.37.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 22 Jan 2026 23:37:25 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v11 12/12] selftests/bpf: test fsession mixed with fentry and fexit Date: Fri, 23 Jan 2026 15:35:32 +0800 Message-ID: <20260123073532.238985-13-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260123073532.238985-1-dongml2@chinatelecom.cn> References: <20260123073532.238985-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