From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f195.google.com (mail-yw1-f195.google.com [209.85.128.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AE47627B32D for ; Wed, 7 Jan 2026 06:44:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768261; cv=none; b=nPNNa8NUooqGDV+70mb6NWQQnng8ZQ8bwFr0xj27/u/8UwQgrotUoa9n3CHpAzVMPX57yVfQjcZJ/5sveE9uO5bZGlmq6m6i5C4e4BsWC9GS5a/Mj6EB1PCcxpoiQUQAQiznRjgJxENd4Ff0m1oDh4pN6sL/h3sjMZ5RAyqvdFQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768261; c=relaxed/simple; bh=JyXV+aGEygdM/H0N7tCQ6BE2WNr/Nm1KVb47QZyWlmg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IPjRZUSOpgRBjpdkAt3Rhv6uyPIaTPSn/Y+4SHAZSJDCp6mNzNKxOG2///SOZ/V3Ce1Pkhzjr76ne1w7FLwxvCgFDSMokXWrAc33SaGmYgINq0904KwQR+YSRlPHi5fo93nGFq3ZiUPO3k2e0TUQ7GKM8pj8CBs4ijEpWdrCNFo= 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=LeOP/y85; arc=none smtp.client-ip=209.85.128.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LeOP/y85" Received: by mail-yw1-f195.google.com with SMTP id 00721157ae682-79088484065so20396167b3.1 for ; Tue, 06 Jan 2026 22:44:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768258; x=1768373058; 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=zQ1oC2+4hrBwDwtjAKwwTlvdbGVZePFATk60sCa77Ss=; b=LeOP/y85JwPIawD8PwHdS+pTCN0XXJaYNqw+xBt4AM+r3P2NTGJSRz9jkLxfCvTYFC MTf+rb5PnyXwXXPMZkXSQEskSeard3QiJge02pxvjWtZD/H7Yw5BR0BCFtKbfb2oqYDo EWgVfu7SQxXpFhntKKYeNxXLCQ/07t6Y1UD1bLAwgTKukJHziOOcb76cB3BY/31vexZW +Y0zU8Mpdb9LDryUIzqTmyFRyOeFOey67wUYySl1VtKOxOky80dB47S8kciPaDi8aIcR tj+0ZOi1BzRdpmJivZpRBkkKzJR1jhyhCCRfY2iK2HIglaJ1k4tBp/8NSpheID6YRQZo RxuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768258; x=1768373058; 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=zQ1oC2+4hrBwDwtjAKwwTlvdbGVZePFATk60sCa77Ss=; b=IkAxSBra/xsHj0gDuA/HMn+q5dc/xSl5A79+6uFuGX9GV7sVu4X9ZcED3jsgslH9Yt Rwtsv5Rgm2vJlu6y+BuPaCF8sF+R1VE0ni2s9NxUrrYGgpgeDcxnuyHW2SlV2dBi6tiR magrrkuamW04Ar8ANSwjoYl8UnkNlQkBYlZAjOxmd9NMQJRU0CLxwHDtvq7xQXZPDWlu PjZzehs9IOuS2umng+qAaRV2L7f5wOQ7BKYIDzFOpvqDMxrQGrUMfYTR5iESDEgAXYlJ sz/VGVfQL8BQfkFjAJBuMkfCsbs/q95cLdwUNstizNAhDPii7grLLTMlpmZAZWnIRIYM YbYA== X-Forwarded-Encrypted: i=1; AJvYcCXjUBss4owUpl/6yWzQMz63v+rueXR3ncja6Bz8iwZE+/KrLNOI23N/g90+tKZ1IqG5KYsOy3pnD4wvWNk=@vger.kernel.org X-Gm-Message-State: AOJu0YyO7U/lA8Ogc1ZAzp5XN2mMDb1i2Puh7/ymnH0vBMwXrMBnx1lh do8KUgKRtTcBeyxH3PWyXMIddLnoA2e7x4UVde0/pKdht27TybbkFkGh X-Gm-Gg: AY/fxX79+9hUGxZRCm+sQUo9r71wNZ1VNf1TFs5XKTaj77OudpTG682VIjRPkhULDZZ NRawFL2x9gtBVx/4NbJ6SY2MsqHR+eDvuUfxLdGEgm9LogHqTe1kvLV2NvBolHCSQxVOO3hUKv6 ee//+TV2oKd0YzmXobEQ3m9+RBEaLyLUKCKGBG/X/4HIr3XydWGNFryL6lI3UZ+6y+g5zy+cGE6 OeQ7EnJ0X8vsnzuABFsf1uJTkxYmYZxhZWUKEq1ccJ3JoFY2vefe8hfcV4kZ0ACXT9XyImJAJNk vVIba9bwsRkwZeTBAW1RIjPwU7f92Upn4B2T1zKnVfCV4KT4OjX1vaRajDZkN/uPGXW1v0/w+sK q/pBOjXHsgVIEA/XFH+slQnN7MHWmy9KIbn3dbh1xObRxdwOI8thCeJAPyjQzKPYDM0PrKcAgS7 +aYrz+gRs= X-Google-Smtp-Source: AGHT+IHixtw2Y30Z6uAzNiAXNxT/DYJ49JsXdOglIGWb67gIKwIB5snQyAhJZ1OVotyjyTALZ+Lh9A== X-Received: by 2002:a05:690c:7341:b0:787:deea:1ba8 with SMTP id 00721157ae682-790b5828f50mr34942647b3.50.1767768257634; Tue, 06 Jan 2026 22:44:17 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.44.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:44:17 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 01/11] bpf: add fsession support Date: Wed, 7 Jan 2026 14:43:42 +0800 Message-ID: <20260107064352.291069-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The fsession is something that similar to kprobe session. It allow to attach a single BPF program to both the entry and the exit of the target functions. Introduce the struct bpf_fsession_link, which allows to add the link to both the fentry and fexit progs_hlist of the trampoline. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v5: - unify the name to "fsession" - use more explicit way in __bpf_trampoline_link_prog() v4: - instead of adding a new hlist to progs_hlist in trampoline, add the bpf program to both the fentry hlist and the fexit hlist. --- include/linux/bpf.h | 19 +++++++++ include/uapi/linux/bpf.h | 1 + kernel/bpf/btf.c | 2 + kernel/bpf/syscall.c | 18 ++++++++- kernel/bpf/trampoline.c | 40 ++++++++++++++++--- kernel/bpf/verifier.c | 12 ++++-- net/bpf/test_run.c | 1 + net/core/bpf_sk_storage.c | 1 + tools/include/uapi/linux/bpf.h | 1 + .../bpf/prog_tests/tracing_failure.c | 2 +- 10 files changed, 87 insertions(+), 10 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index a63e47d2109c..565ca7052518 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1309,6 +1309,7 @@ enum bpf_tramp_prog_type { BPF_TRAMP_MODIFY_RETURN, BPF_TRAMP_MAX, BPF_TRAMP_REPLACE, /* more than MAX */ + BPF_TRAMP_FSESSION, }; =20 struct bpf_tramp_image { @@ -1875,6 +1876,11 @@ struct bpf_tracing_link { struct bpf_prog *tgt_prog; }; =20 +struct bpf_fsession_link { + struct bpf_tracing_link link; + struct bpf_tramp_link fexit; +}; + struct bpf_raw_tp_link { struct bpf_link link; struct bpf_raw_event_map *btp; @@ -2169,6 +2175,19 @@ static inline void bpf_struct_ops_desc_release(struc= t bpf_struct_ops_desc *st_op =20 #endif =20 +static inline int bpf_fsession_cnt(struct bpf_tramp_links *links) +{ + struct bpf_tramp_links fentries =3D links[BPF_TRAMP_FENTRY]; + int cnt =3D 0; + + for (int i =3D 0; i < links[BPF_TRAMP_FENTRY].nr_links; i++) { + if (fentries.links[i]->link.prog->expected_attach_type =3D=3D BPF_TRACE_= FSESSION) + cnt++; + } + + return cnt; +} + int bpf_prog_ctx_arg_info_init(struct bpf_prog *prog, const struct bpf_ctx_arg_aux *info, u32 cnt); =20 diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 84ced3ed2d21..cd2d7c4fc6e7 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 539c9fdea41d..8b1dcd440356 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -6107,6 +6107,7 @@ static int btf_validate_prog_ctx_type(struct bpf_veri= fier_log *log, const struct case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: case BPF_MODIFY_RETURN: + case BPF_TRACE_FSESSION: /* allow u64* as ctx */ if (btf_is_int(t) && t->size =3D=3D 8) return 0; @@ -6704,6 +6705,7 @@ bool btf_ctx_access(int off, int size, enum bpf_acces= s_type type, fallthrough; case BPF_LSM_CGROUP: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: /* When LSM programs are attached to void LSM hooks * they use FEXIT trampolines and when attached to * int LSM hooks, they use MODIFY_RETURN trampolines. diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 6dd2ad2f9e81..64f6eff02f9f 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -3574,6 +3574,7 @@ static int bpf_tracing_prog_attach(struct bpf_prog *p= rog, case BPF_PROG_TYPE_TRACING: if (prog->expected_attach_type !=3D BPF_TRACE_FENTRY && prog->expected_attach_type !=3D BPF_TRACE_FEXIT && + prog->expected_attach_type !=3D BPF_TRACE_FSESSION && prog->expected_attach_type !=3D BPF_MODIFY_RETURN) { err =3D -EINVAL; goto out_put_prog; @@ -3623,7 +3624,21 @@ static int bpf_tracing_prog_attach(struct bpf_prog *= prog, key =3D bpf_trampoline_compute_key(tgt_prog, NULL, btf_id); } =20 - link =3D kzalloc(sizeof(*link), GFP_USER); + if (prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + struct bpf_fsession_link *fslink; + + fslink =3D kzalloc(sizeof(*fslink), GFP_USER); + if (fslink) { + bpf_link_init(&fslink->fexit.link, BPF_LINK_TYPE_TRACING, + &bpf_tracing_link_lops, prog, attach_type); + fslink->fexit.cookie =3D bpf_cookie; + link =3D &fslink->link; + } else { + link =3D NULL; + } + } else { + link =3D kzalloc(sizeof(*link), GFP_USER); + } if (!link) { err =3D -ENOMEM; goto out_put_prog; @@ -4347,6 +4362,7 @@ attach_type_to_prog_type(enum bpf_attach_type attach_= type) case BPF_TRACE_RAW_TP: case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: case BPF_MODIFY_RETURN: return BPF_PROG_TYPE_TRACING; case BPF_LSM_MAC: diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c index 2a125d063e62..11e043049d68 100644 --- a/kernel/bpf/trampoline.c +++ b/kernel/bpf/trampoline.c @@ -111,7 +111,7 @@ bool bpf_prog_has_trampoline(const struct bpf_prog *pro= g) =20 return (ptype =3D=3D BPF_PROG_TYPE_TRACING && (eatype =3D=3D BPF_TRACE_FENTRY || eatype =3D=3D BPF_TRACE_FEXIT || - eatype =3D=3D BPF_MODIFY_RETURN)) || + eatype =3D=3D BPF_MODIFY_RETURN || eatype =3D=3D BPF_TRACE_FSESSION)) || (ptype =3D=3D BPF_PROG_TYPE_LSM && eatype =3D=3D BPF_LSM_MAC); } =20 @@ -559,6 +559,8 @@ static enum bpf_tramp_prog_type bpf_attach_type_to_tram= p(struct bpf_prog *prog) return BPF_TRAMP_MODIFY_RETURN; case BPF_TRACE_FEXIT: return BPF_TRAMP_FEXIT; + case BPF_TRACE_FSESSION: + return BPF_TRAMP_FSESSION; case BPF_LSM_MAC: if (!prog->aux->attach_func_proto->type) /* The function returns void, we cannot modify its @@ -596,6 +598,8 @@ static int __bpf_trampoline_link_prog(struct bpf_tramp_= link *link, { enum bpf_tramp_prog_type kind; struct bpf_tramp_link *link_exiting; + struct bpf_fsession_link *fslink; + struct hlist_head *prog_list; int err =3D 0; int cnt =3D 0, i; =20 @@ -621,24 +625,44 @@ static int __bpf_trampoline_link_prog(struct bpf_tram= p_link *link, BPF_MOD_JUMP, NULL, link->link.prog->bpf_func); } + if (kind =3D=3D BPF_TRAMP_FSESSION) { + prog_list =3D &tr->progs_hlist[BPF_TRAMP_FENTRY]; + cnt++; + } else { + prog_list =3D &tr->progs_hlist[kind]; + } if (cnt >=3D BPF_MAX_TRAMP_LINKS) return -E2BIG; if (!hlist_unhashed(&link->tramp_hlist)) /* prog already linked */ return -EBUSY; - hlist_for_each_entry(link_exiting, &tr->progs_hlist[kind], tramp_hlist) { + hlist_for_each_entry(link_exiting, prog_list, tramp_hlist) { if (link_exiting->link.prog !=3D link->link.prog) continue; /* prog already linked */ return -EBUSY; } =20 - hlist_add_head(&link->tramp_hlist, &tr->progs_hlist[kind]); - tr->progs_cnt[kind]++; + hlist_add_head(&link->tramp_hlist, prog_list); + if (kind =3D=3D BPF_TRAMP_FSESSION) { + tr->progs_cnt[BPF_TRAMP_FENTRY]++; + fslink =3D container_of(link, struct bpf_fsession_link, link.link); + hlist_add_head(&fslink->fexit.tramp_hlist, + &tr->progs_hlist[BPF_TRAMP_FEXIT]); + tr->progs_cnt[BPF_TRAMP_FEXIT]++; + } else { + tr->progs_cnt[kind]++; + } err =3D bpf_trampoline_update(tr, true /* lock_direct_mutex */); if (err) { hlist_del_init(&link->tramp_hlist); - tr->progs_cnt[kind]--; + if (kind =3D=3D BPF_TRAMP_FSESSION) { + tr->progs_cnt[BPF_TRAMP_FENTRY]--; + hlist_del_init(&fslink->fexit.tramp_hlist); + tr->progs_cnt[BPF_TRAMP_FEXIT]--; + } else { + tr->progs_cnt[kind]--; + } } return err; } @@ -659,6 +683,7 @@ static int __bpf_trampoline_unlink_prog(struct bpf_tram= p_link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog) { + struct bpf_fsession_link *fslink; enum bpf_tramp_prog_type kind; int err; =20 @@ -672,6 +697,11 @@ static int __bpf_trampoline_unlink_prog(struct bpf_tra= mp_link *link, guard(mutex)(&tgt_prog->aux->ext_mutex); tgt_prog->aux->is_extended =3D false; return err; + } else if (kind =3D=3D BPF_TRAMP_FSESSION) { + fslink =3D container_of(link, struct bpf_fsession_link, link.link); + hlist_del_init(&fslink->fexit.tramp_hlist); + tr->progs_cnt[BPF_TRAMP_FEXIT]--; + kind =3D BPF_TRAMP_FENTRY; } hlist_del_init(&link->tramp_hlist); tr->progs_cnt[kind]--; diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 53635ea2e41b..774c9b0aafa3 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -17403,6 +17403,7 @@ static int check_return_code(struct bpf_verifier_en= v *env, int regno, const char switch (env->prog->expected_attach_type) { case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: range =3D retval_range(0, 0); break; case BPF_TRACE_RAW_TP: @@ -23300,6 +23301,7 @@ static int do_misc_fixups(struct bpf_verifier_env *= env) if (prog_type =3D=3D BPF_PROG_TYPE_TRACING && insn->imm =3D=3D BPF_FUNC_get_func_ret) { if (eatype =3D=3D BPF_TRACE_FEXIT || + eatype =3D=3D BPF_TRACE_FSESSION || eatype =3D=3D BPF_MODIFY_RETURN) { /* Load nr_args from ctx - 8 */ insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); @@ -24244,7 +24246,8 @@ int bpf_check_attach_target(struct bpf_verifier_log= *log, if (tgt_prog->type =3D=3D BPF_PROG_TYPE_TRACING && prog_extension && (tgt_prog->expected_attach_type =3D=3D BPF_TRACE_FENTRY || - tgt_prog->expected_attach_type =3D=3D BPF_TRACE_FEXIT)) { + tgt_prog->expected_attach_type =3D=3D BPF_TRACE_FEXIT || + tgt_prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION)) { /* Program extensions can extend all program types * except fentry/fexit. The reason is the following. * The fentry/fexit programs are used for performance @@ -24259,7 +24262,7 @@ int bpf_check_attach_target(struct bpf_verifier_log= *log, * beyond reasonable stack size. Hence extending fentry * is not allowed. */ - bpf_log(log, "Cannot extend fentry/fexit\n"); + bpf_log(log, "Cannot extend fentry/fexit/fsession\n"); return -EINVAL; } } else { @@ -24343,6 +24346,7 @@ int bpf_check_attach_target(struct bpf_verifier_log= *log, case BPF_LSM_CGROUP: case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: if (!btf_type_is_func(t)) { bpf_log(log, "attach_btf_id %u is not a function\n", btf_id); @@ -24509,6 +24513,7 @@ static bool can_be_sleepable(struct bpf_prog *prog) case BPF_TRACE_FEXIT: case BPF_MODIFY_RETURN: case BPF_TRACE_ITER: + case BPF_TRACE_FSESSION: return true; default: return false; @@ -24590,9 +24595,10 @@ static int check_attach_btf_id(struct bpf_verifier= _env *env) tgt_info.tgt_name); return -EINVAL; } else if ((prog->expected_attach_type =3D=3D BPF_TRACE_FEXIT || + prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION || prog->expected_attach_type =3D=3D BPF_MODIFY_RETURN) && btf_id_set_contains(&noreturn_deny, btf_id)) { - verbose(env, "Attaching fexit/fmod_ret to __noreturn function '%s' is re= jected.\n", + verbose(env, "Attaching fexit/fsession/fmod_ret to __noreturn function '= %s' is rejected.\n", tgt_info.tgt_name); return -EINVAL; } diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c index 655efac6f133..3b0d9bd039de 100644 --- a/net/bpf/test_run.c +++ b/net/bpf/test_run.c @@ -685,6 +685,7 @@ int bpf_prog_test_run_tracing(struct bpf_prog *prog, switch (prog->expected_attach_type) { case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: if (bpf_fentry_test1(1) !=3D 2 || bpf_fentry_test2(2, 3) !=3D 5 || bpf_fentry_test3(4, 5, 6) !=3D 15 || diff --git a/net/core/bpf_sk_storage.c b/net/core/bpf_sk_storage.c index 850dd736ccd1..de111818f3a0 100644 --- a/net/core/bpf_sk_storage.c +++ b/net/core/bpf_sk_storage.c @@ -365,6 +365,7 @@ static bool bpf_sk_storage_tracing_allowed(const struct= bpf_prog *prog) return true; case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: return !!strncmp(prog->aux->attach_func_name, "bpf_sk_storage", strlen("bpf_sk_storage")); default: diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 6b92b0847ec2..012abaf3d4ac 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/tools/testing/selftests/bpf/prog_tests/tracing_failure.c b/too= ls/testing/selftests/bpf/prog_tests/tracing_failure.c index 10e231965589..f9f9e1cb87bf 100644 --- a/tools/testing/selftests/bpf/prog_tests/tracing_failure.c +++ b/tools/testing/selftests/bpf/prog_tests/tracing_failure.c @@ -73,7 +73,7 @@ static void test_tracing_deny(void) static void test_fexit_noreturns(void) { test_tracing_fail_prog("fexit_noreturns", - "Attaching fexit/fmod_ret to __noreturn function 'do_exit' is re= jected."); + "Attaching fexit/fsession/fmod_ret to __noreturn function 'do_ex= it' is rejected."); } =20 void test_tracing_failure(void) --=20 2.52.0 From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f193.google.com (mail-yw1-f193.google.com [209.85.128.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CF6FE27603A for ; Wed, 7 Jan 2026 06:44:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768271; cv=none; b=LvKuk8qUUJ+/VTMIS/C4EOGQ4mzqprX0gWfvDCMFWrkpmFWF6lceT1ISTYxo3k7j5DyarCepUcYl0RHDN6SmhLUw3NKXhEQSHxvo28D1PUObhsbl2iXu+n9Zq6g4OePQ3bQxZxSWfwOZ+H/xwU1tQWWtuf4do8e4AHDOz3hq/y0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768271; c=relaxed/simple; bh=EbBBNk9kjzjCpCFyzUPhaLcaT7PWrk79L08m4td2Oks=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fZZ/5e7VROy0eKXf5/rKzMIUzOKGeo0gk8v/XsQ4j1YxWvTR1/SDqVyNNwQSrv8HIDiwghxiq/7BBJJhawLEoa1YXlRYtdpD46jPOEKexQh8NDyYzXdPHIHKlN0To4jT66CbvuFO9VVF5MyF4wJ19LMFuusw9/01q2D0s67LlBA= 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=Uh7mszrr; arc=none smtp.client-ip=209.85.128.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Uh7mszrr" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-78fc3572431so20153357b3.0 for ; Tue, 06 Jan 2026 22:44:29 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768269; x=1768373069; 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=HdnjA0JVYs9aBHZi1/ucW5h0zOp5BIw2WPSjcDUoa+M=; b=Uh7mszrriQxUn8Yx/NxY3n9dQFSmDeCRYIkMWATq67ENHU5HEExsTI+LTYHhrpD0ap X6AWNbkcwmuoworqrKB+wfXbTC/iqZPveiIGyBPgfWVB+niH5VKww6aFoaWgCikjBxR/ zg3hlbzTat1XEK3PPJdPE8Qdlnk726gOVopnZukEyVolzz/Ii27wFeu+l7rcJocke78F Z2oi2tE03ApIdGa61EyuYiLR07LHGEB29NCikM39nPzAHTckUgAMSTV70ID80SzAXVUu 1fa4eBObDq1K9j/T+9p8ydVq8n47bgsD30wvsgbjbP67JKstHEKixBw0KteTfBVDj+7G z6MQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768269; x=1768373069; 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=HdnjA0JVYs9aBHZi1/ucW5h0zOp5BIw2WPSjcDUoa+M=; b=XEoe8+FZ9t5xAYGlP5Uhq0plcUq0x40s4km3He7sPOqbs4JC0ur2ypCvl3BbBtYW4Z +1JjTbrZpyxFFXkmGpU7WyV33w4GNim1e5watn5kkG1vOcOAECkmxB8Ve863IfYiqUaw d9ZHhUeefXIRNTjs0JYGPoaw9gj8A/ZQ2Gja8kTbbyziZy/8Xp0ZKEP360xEM6f8YaEP SlXfE6rKum7IemrRIfaC6uDqVXv+GM9cHzPA6Llm+BTwYOhzRZTShvrJ4TzhhN0xnySN nH9p3OV4QIlFb8Jbv9s/m7fft1B5TsfoCMkn3SSacWPBxRa/LDNfJSDjk+1Tnkpan3+L 0aGA== X-Forwarded-Encrypted: i=1; AJvYcCW8nuTSzYkTd5cYT1KERwPwTAU/0OIK7ICKNJ+WFNE4L0uH+V1tEhfg5noqvDvELgZca123yrAixdIRDPU=@vger.kernel.org X-Gm-Message-State: AOJu0YzGjkf1CIICynkoJk0DNExzj445rP6exhGXLGTDNgfc78TE4VFk fWqTS46LWJFJhhxz3PYnNX9dyjEViuBhARI/LQzsW4BIzgRgx8T2FBqg X-Gm-Gg: AY/fxX6Qrjd/MfZnJb/XKc0H3t8qQRSHoe8ieDWcrFUlQ9NFt3CpX3QYaLax6j4WcF1 vmDRZ+mufIGo3aq6z16Yr5gzpuSNvPqoJJwuOGnqr9DUCUvzJ5F0z6mIEv9UVWH4io7z38Mm5PA mhukLHeaoobZdIB3vYym6OAQsnNIKvSXGFPYc/BYDneKthD0X2Ss0m1fiWL4D0b6Ze7wbUpdAWj WnOB4b1puq48kYyKJC6Lf+xeyR7C1uDHipJhGXJnopzvH5rpkHy7q04wCTeluZGA8eCRERZU12X Ltd76EYt8vgxkdinVSM7S67XkcZXY4TxImQdgBhyDb8cLisdF4JzrmQdmooLb3ZOn6eN7LW111D hU0yojpS7v22MhOiaEqNfT4g4LpVpAzyhvgS6DxnnIZ5PxJQTes5YZpzBrgw7ygIj5w0jmLxn5J fL4S7SZ4ylbGH6nJzmrQ== X-Google-Smtp-Source: AGHT+IGtpLcWrRf9dEL5zYfpkSx+azOFZX2qkU4sjke7yCn5rtEe2Z4uRMyu0OG3M8BUwRrkEfL/TA== X-Received: by 2002:a05:690c:60c4:b0:786:6b92:b201 with SMTP id 00721157ae682-790b56bdffdmr16764597b3.13.1767768268814; Tue, 06 Jan 2026 22:44:28 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.44.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:44:28 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 02/11] bpf: use last 8-bits for the nr_args in trampoline Date: Wed, 7 Jan 2026 14:43:43 +0800 Message-ID: <20260107064352.291069-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For now, ctx[-1] is used to store the nr_args in the trampoline. However, 1-byte is enough to store such information. Therefore, we use only the last byte of ctx[-1] to store the nr_args, and reserve the rest for other usages. Signed-off-by: Menglong Dong --- kernel/bpf/verifier.c | 35 +++++++++++++++++++---------------- kernel/trace/bpf_trace.c | 4 ++-- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 774c9b0aafa3..bfff3f84fd91 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -23277,15 +23277,16 @@ static int do_misc_fixups(struct bpf_verifier_env= *env) insn->imm =3D=3D BPF_FUNC_get_func_arg) { /* Load nr_args from ctx - 8 */ insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); - insn_buf[1] =3D BPF_JMP32_REG(BPF_JGE, BPF_REG_2, BPF_REG_0, 6); - insn_buf[2] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 3); - insn_buf[3] =3D BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_1); - insn_buf[4] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_2, 0); - insn_buf[5] =3D BPF_STX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, 0); - insn_buf[6] =3D BPF_MOV64_IMM(BPF_REG_0, 0); - insn_buf[7] =3D BPF_JMP_A(1); - insn_buf[8] =3D BPF_MOV64_IMM(BPF_REG_0, -EINVAL); - cnt =3D 9; + insn_buf[1] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFF); + insn_buf[2] =3D BPF_JMP32_REG(BPF_JGE, BPF_REG_2, BPF_REG_0, 6); + insn_buf[3] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_2, 3); + insn_buf[4] =3D BPF_ALU64_REG(BPF_ADD, BPF_REG_2, BPF_REG_1); + insn_buf[5] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_2, 0); + insn_buf[6] =3D BPF_STX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, 0); + insn_buf[7] =3D BPF_MOV64_IMM(BPF_REG_0, 0); + insn_buf[8] =3D BPF_JMP_A(1); + insn_buf[9] =3D BPF_MOV64_IMM(BPF_REG_0, -EINVAL); + cnt =3D 10; =20 new_prog =3D bpf_patch_insn_data(env, i + delta, insn_buf, cnt); if (!new_prog) @@ -23305,12 +23306,13 @@ static int do_misc_fixups(struct bpf_verifier_env= *env) eatype =3D=3D BPF_MODIFY_RETURN) { /* Load nr_args from ctx - 8 */ insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); - insn_buf[1] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3); - insn_buf[2] =3D BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1); - insn_buf[3] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, 0); - insn_buf[4] =3D BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, 0); - insn_buf[5] =3D BPF_MOV64_IMM(BPF_REG_0, 0); - cnt =3D 6; + insn_buf[1] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFF); + insn_buf[2] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3); + insn_buf[3] =3D BPF_ALU64_REG(BPF_ADD, BPF_REG_0, BPF_REG_1); + insn_buf[4] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_3, BPF_REG_0, 0); + insn_buf[5] =3D BPF_STX_MEM(BPF_DW, BPF_REG_2, BPF_REG_3, 0); + insn_buf[6] =3D BPF_MOV64_IMM(BPF_REG_0, 0); + cnt =3D 7; } else { insn_buf[0] =3D BPF_MOV64_IMM(BPF_REG_0, -EOPNOTSUPP); cnt =3D 1; @@ -23331,8 +23333,9 @@ static int do_misc_fixups(struct bpf_verifier_env *= env) insn->imm =3D=3D BPF_FUNC_get_func_arg_cnt) { /* Load nr_args from ctx - 8 */ insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFF); =20 - new_prog =3D bpf_patch_insn_data(env, i + delta, insn_buf, 1); + new_prog =3D bpf_patch_insn_data(env, i + delta, insn_buf, 2); if (!new_prog) return -ENOMEM; =20 diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 6e076485bf70..6b58f9a4dc92 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -1194,7 +1194,7 @@ const struct bpf_func_proto bpf_get_branch_snapshot_p= roto =3D { BPF_CALL_3(get_func_arg, void *, ctx, u32, n, u64 *, value) { /* This helper call is inlined by verifier. */ - u64 nr_args =3D ((u64 *)ctx)[-1]; + u64 nr_args =3D ((u64 *)ctx)[-1] & 0xFF; =20 if ((u64) n >=3D nr_args) return -EINVAL; @@ -1214,7 +1214,7 @@ static const struct bpf_func_proto bpf_get_func_arg_p= roto =3D { BPF_CALL_2(get_func_ret, void *, ctx, u64 *, value) { /* This helper call is inlined by verifier. */ - u64 nr_args =3D ((u64 *)ctx)[-1]; + u64 nr_args =3D ((u64 *)ctx)[-1] & 0xFF; =20 *value =3D ((u64 *)ctx)[nr_args]; return 0; --=20 2.52.0 From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f194.google.com (mail-yw1-f194.google.com [209.85.128.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B1420274B53 for ; Wed, 7 Jan 2026 06:44:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768282; cv=none; b=bNMmdD+oeVuwYXC+n05Pinn6jPiqvRcvvA61c4FKFy6gCvgnXXo2JyAHVgVa/fs/5QNFQRuYFNj0/hwdS4G901kwmW3vxp0ZfqH/oadct2OIsIuT+GDFwzWr9Y1dPQqDTHvy8LGkwfHuganKLTN7PdOQxWUv/RcxQ8noudjj8kU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768282; c=relaxed/simple; bh=Sdw4L0/f+9bOJgVp2ygjRzjO2Tv4jyY7wvq3smW/QB4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=mfOT3ABnFc4MFVhbwaIblleJK8kW0q0F3X4a/LO+EbXxCRSOBc936OabN+EUJA9s0DroHhTzxoAIiMYLEFBxv8X4B5zVqC9aJhXcZ+8XdDHKgwOdol7fkDMiFUcmPZb6uKj6YVBCNAAGxVfwLnchwfvyX7vNDKkFWOo5eLxjhWA= 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=mNCB4OIB; arc=none smtp.client-ip=209.85.128.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mNCB4OIB" Received: by mail-yw1-f194.google.com with SMTP id 00721157ae682-78e6dc6d6d7so19086917b3.3 for ; Tue, 06 Jan 2026 22:44:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768280; x=1768373080; 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=GQDASkcIUkEroCZV//8nWKbw5U27O0xyAZ07smAcNKo=; b=mNCB4OIBCahqEKCMjToPO4K5s4kpTgTnZ+apMI3lC3nlaVRrp07SZ/5IQcT+Gpukkd FGbrAR2PzINBnF2JWTSFpqshrnz9gxQVObBvBs01CGSB1M8Rt7shnWt9UdV5ADd3wrQ5 3/3Zsczyrpi9U6hELqBzaDb/E/f2rp3CueGVDWlvLpUYUv21YMFXNM7PMKQK5cqIrlrf a75Eodnnp2+erWjR2lXl5UrQYWo//D74/FJKrhXGYgd0mqCpZFC2cigd/vzPKCPyTBdg js26BFulBq6c97WN2SL56P44lYN6jSdvOBfp4ZImdJJ1+HBJt4eXm7dJTGYbm8ZwSUJ6 FVsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768280; x=1768373080; 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=GQDASkcIUkEroCZV//8nWKbw5U27O0xyAZ07smAcNKo=; b=q5F13ja1Hj+0XAUyMFY80iO8C0PHQoPT0DZZFIBlGMrFK/z2zZwOtBkeL96M0H72it OggQNRknnx2NSotmlN5Z136AU9yjpemcaSFn9MdtisVTJm4jlwm8ZItuccsZ+imZ5R57 A3w1VsMxausfJ2Wn/eHzdKMXgtMgmOyQWUxDJ2zhc6aplll1eWFk3mOOKc4tILrOFR7Q ++cItPiah0JbtCdymm3VNiJpZR70HLFzRNpUW53pfhjnzRD43dgEC4vKyKSjcevwrKgP 16rubvmwinurfbTMifu2m8cn5ol+RU3IolZUFNIwMMe/BEsPgLqjZNTU5fmnE75PxfSP n/xw== X-Forwarded-Encrypted: i=1; AJvYcCVV6e0OYhan4sP+uSSdz+NTtNCAbF99IQpKYQtairjMFdOeMS1e4mvUHTGxxZhCjTAuPyf8E3pnWqehvd0=@vger.kernel.org X-Gm-Message-State: AOJu0YxixdboQldVMcW3p+emeAu0ANTTz5ywRijrmfP/XkS+7I45C3iM S3EjR+I4tjkaJCY/X8vUGZMdwKhBNEFHCgJsT+cFQi5nZbcrnrofdost X-Gm-Gg: AY/fxX7KLcbCzvhxY3M17I1iNhQ+4IU1MAMiFa5n9OHiRiEf7HSIFp4DHt5CwXSgADW cfSy9XT7/f+nphJ1tfqYmlQ7SZVRLHJPnEc87t2cEbnynHQYk0WdSQA203LNdQRjlEJfWbIx8j5 t9s5kulByVgXx9BliWNylWucXYOxB/qLwZ5RWcoDywESWNK9eesipQlaw6bzmzOkxU9mdVvDCqj xM9irjiT2yeIZ+s+IQXV8DcyiBvSiOKsQY8Ov1XjwgQ9W2fwlMHPepUdGqe4tuAGXwsfPimWl+E JCG0tjRAZxDn0+/gm6untA7IqnuAYnb0a9gdxlNomkeHOGmtuVOzwl5yjED8mf15KnAUwoUUSMJ WtMX3zQfG/76q5XZ2phMfCOS1RMLNT4Djgb9oiemAc3Zjx/h9K5eVfm0VCMUkykquarMFxPBH0u NXwgutjFY= X-Google-Smtp-Source: AGHT+IEYbAJN2zDEdJ4wR6Exhr9eYMufUcV3fos/4HPG3TLaZ6izLosvDABjzLd25Bx5/62Rx2G7Fg== X-Received: by 2002:a05:690c:6712:b0:78f:858b:95a5 with SMTP id 00721157ae682-790b55ed7fbmr17319057b3.27.1767768279756; Tue, 06 Jan 2026 22:44:39 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.44.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:44:39 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 03/11] bpf: change prototype of bpf_session_{cookie,is_return} Date: Wed, 7 Jan 2026 14:43:44 +0800 Message-ID: <20260107064352.291069-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-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 --- kernel/trace/bpf_trace.c | 4 ++-- tools/testing/selftests/bpf/bpf_kfuncs.h | 4 ++-- .../bpf/progs/kprobe_multi_session_cookie.c | 12 ++++++------ .../selftests/bpf/progs/uprobe_multi_session.c | 4 ++-- .../bpf/progs/uprobe_multi_session_cookie.c | 12 ++++++------ .../bpf/progs/uprobe_multi_session_recursive.c | 8 ++++---- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 6b58f9a4dc92..736b32cf2195 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -3316,7 +3316,7 @@ static u64 bpf_uprobe_multi_entry_ip(struct bpf_run_c= tx *ctx) =20 __bpf_kfunc_start_defs(); =20 -__bpf_kfunc bool bpf_session_is_return(void) +__bpf_kfunc bool bpf_session_is_return(void *ctx) { struct bpf_session_run_ctx *session_ctx; =20 @@ -3324,7 +3324,7 @@ __bpf_kfunc bool bpf_session_is_return(void) return session_ctx->is_return; } =20 -__bpf_kfunc __u64 *bpf_session_cookie(void) +__bpf_kfunc __u64 *bpf_session_cookie(void *ctx) { struct bpf_session_run_ctx *session_ctx; =20 diff --git a/tools/testing/selftests/bpf/bpf_kfuncs.h b/tools/testing/selft= ests/bpf/bpf_kfuncs.h index e0189254bb6e..dc495cb4c22e 100644 --- a/tools/testing/selftests/bpf/bpf_kfuncs.h +++ b/tools/testing/selftests/bpf/bpf_kfuncs.h @@ -79,8 +79,8 @@ extern int bpf_verify_pkcs7_signature(struct bpf_dynptr *= data_ptr, struct bpf_dynptr *sig_ptr, struct bpf_key *trusted_keyring) __ksym; =20 -extern bool bpf_session_is_return(void) __ksym __weak; -extern __u64 *bpf_session_cookie(void) __ksym __weak; +extern bool bpf_session_is_return(void *ctx) __ksym __weak; +extern __u64 *bpf_session_cookie(void *ctx) __ksym __weak; =20 struct dentry; /* Description diff --git a/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.= c b/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c index 0835b5edf685..4981d29e3907 100644 --- a/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c +++ b/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c @@ -23,16 +23,16 @@ int BPF_PROG(trigger) return 0; } =20 -static int check_cookie(__u64 val, __u64 *result) +static int check_cookie(struct pt_regs *ctx, __u64 val, __u64 *result) { __u64 *cookie; =20 if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - cookie =3D bpf_session_cookie(); + cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) + if (bpf_session_is_return(ctx)) *result =3D *cookie =3D=3D val ? val : 0; else *cookie =3D val; @@ -42,17 +42,17 @@ static int check_cookie(__u64 val, __u64 *result) SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_1(struct pt_regs *ctx) { - return check_cookie(1, &test_kprobe_1_result); + return check_cookie(ctx, 1, &test_kprobe_1_result); } =20 SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_2(struct pt_regs *ctx) { - return check_cookie(2, &test_kprobe_2_result); + return check_cookie(ctx, 2, &test_kprobe_2_result); } =20 SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_3(struct pt_regs *ctx) { - return check_cookie(3, &test_kprobe_3_result); + return check_cookie(ctx, 3, &test_kprobe_3_result); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session.c b/too= ls/testing/selftests/bpf/progs/uprobe_multi_session.c index 30bff90b68dc..a06c2d7ec022 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session.c @@ -51,7 +51,7 @@ static int uprobe_multi_check(void *ctx, bool is_return) SEC("uprobe.session//proc/self/exe:uprobe_multi_func_*") int uprobe(struct pt_regs *ctx) { - return uprobe_multi_check(ctx, bpf_session_is_return()); + return uprobe_multi_check(ctx, bpf_session_is_return(ctx)); } =20 static __always_inline bool verify_sleepable_user_copy(void) @@ -67,5 +67,5 @@ int uprobe_sleepable(struct pt_regs *ctx) { if (verify_sleepable_user_copy()) uprobe_multi_sleep_result++; - return uprobe_multi_check(ctx, bpf_session_is_return()); + return uprobe_multi_check(ctx, bpf_session_is_return(ctx)); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.= c b/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c index 5befdf944dc6..d916d5017233 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c @@ -13,16 +13,16 @@ __u64 test_uprobe_1_result =3D 0; __u64 test_uprobe_2_result =3D 0; __u64 test_uprobe_3_result =3D 0; =20 -static int check_cookie(__u64 val, __u64 *result) +static int check_cookie(struct pt_regs *ctx, __u64 val, __u64 *result) { __u64 *cookie; =20 if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - cookie =3D bpf_session_cookie(); + cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) + if (bpf_session_is_return(ctx)) *result =3D *cookie =3D=3D val ? val : 0; else *cookie =3D val; @@ -32,17 +32,17 @@ static int check_cookie(__u64 val, __u64 *result) SEC("uprobe.session//proc/self/exe:uprobe_multi_func_1") int uprobe_1(struct pt_regs *ctx) { - return check_cookie(1, &test_uprobe_1_result); + return check_cookie(ctx, 1, &test_uprobe_1_result); } =20 SEC("uprobe.session//proc/self/exe:uprobe_multi_func_2") int uprobe_2(struct pt_regs *ctx) { - return check_cookie(2, &test_uprobe_2_result); + return check_cookie(ctx, 2, &test_uprobe_2_result); } =20 SEC("uprobe.session//proc/self/exe:uprobe_multi_func_3") int uprobe_3(struct pt_regs *ctx) { - return check_cookie(3, &test_uprobe_3_result); + return check_cookie(ctx, 3, &test_uprobe_3_result); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursi= ve.c b/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c index 8fbcd69fae22..d3d682512b69 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c @@ -16,11 +16,11 @@ int idx_return =3D 0; __u64 test_uprobe_cookie_entry[6]; __u64 test_uprobe_cookie_return[3]; =20 -static int check_cookie(void) +static int check_cookie(struct pt_regs *ctx) { - __u64 *cookie =3D bpf_session_cookie(); + __u64 *cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) { + if (bpf_session_is_return(ctx)) { if (idx_return >=3D ARRAY_SIZE(test_uprobe_cookie_return)) return 1; test_uprobe_cookie_return[idx_return++] =3D *cookie; @@ -40,5 +40,5 @@ int uprobe_recursive(struct pt_regs *ctx) if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - return check_cookie(); + return check_cookie(ctx); } --=20 2.52.0 From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f193.google.com (mail-yw1-f193.google.com [209.85.128.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C27D527B347 for ; Wed, 7 Jan 2026 06:44:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768292; cv=none; b=uf2+U2At4N0DyKuCUySU9GLFYeRujQSwvS+76KmgCzOcX/UdktgTCiqXErM1aH8WiOMJ5sRP6OuK6i7aPxqHZoF/617W5c8PO8+l4QO9BVXFEhiZDUb8cpYRqKEAPamS1T1fmP6TLK+pCm3rTWI6bbA3kyR3UgVvAmiGJaJsRWc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768292; c=relaxed/simple; bh=jqWo2iK6Bxy2tyLgV8IzI19MROh4tzgsyjro5ifP6hA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q2jw1Y7KpRvRXUVWnjz9zh4LAapJO68ut6o+aaPuzI7FxGfPQi3vVm+/O42hm+kkSDSKthoohWXthaNMvHClyDbjx8qCQQSwnJZ9V9PGX9DykPeukzLttz3yi2zHt4wetvglyVINiexQKg06oRBxouWMV189uqhYCTWF/J/8LLY= 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=cCaSXTbi; arc=none smtp.client-ip=209.85.128.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cCaSXTbi" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-78fba1a1b1eso9095797b3.1 for ; Tue, 06 Jan 2026 22:44:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768290; x=1768373090; 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=i2bmJ4tSsifyy+WKp7NzscgvS8nGcfZbaX18GsTRYNs=; b=cCaSXTbi0Y24ESkbvlGEmnCrs5VF19WE0BMDpI2Zvj2QSkMVDAufZ+1shW26ij/pko 7aoeWArjnIoo0mvUQRj24RcYB4Aotw9KgzXb4MFtmAYnaGuOjEVAweQYoLaROErKmwJJ Czv3xFM4yyShhPQc/e0qv7BzsCHqjflN89pilplL7pBS2titd0CvhCV5PQWqAfeBFDsZ p/9yG67F0J0RLNHk7hnorsR5f8NC5rf3gwbE1x2qnEZYRGW3DxwnO6kT2eHdDEmAyUhR JiZhLqFtFlucy2U0Np57HQ+Z+m56N+dbmwo5+cOZv27/n4E2LMzDcWMBI5juea6zLNVL KohQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768290; x=1768373090; 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=i2bmJ4tSsifyy+WKp7NzscgvS8nGcfZbaX18GsTRYNs=; b=N4nlNtzFp5Lt3I6ukpY82iH4TAI6qubtO/441yADsFmhHcDFD3PmDgLQmgBZFzBVna 2T50ZuuB/4nJGNGyR+u4prX/W/EIzoAozrAL2ciD1oAZG8/in3GJoCkQC63gkXaUXAGk 2NTKF288JHHk7Oc3k/6KxFueZnR83jUVLiGi84yVgLmM4OOdWyibYQVUex50j9AYYbZJ OokuA/uTzHwMRbxyRHCtSQ3aLbt7CntYb2ISuT4p2bKVUwMVNhrel573GSDGr2bkVXoC Z/gRffrLTgkULxr0wJJuNYkT+CG2MIpdHQHuja+TUXdOaySd4rNKgYZDbJhoCC4labLs 1TjA== X-Forwarded-Encrypted: i=1; AJvYcCVQLq4Q2pB8yH+FNVNpxrS4aN1REMVx6vZ0iBJFkv5Tzvxu2h6J2SWCaIymXFudorPfIMIeOAfMA46Klnc=@vger.kernel.org X-Gm-Message-State: AOJu0YxEZMh2q9Cgsl3zlhUHvWGd1yQvrOdfrSumi0G4xIS0cNt8Wmji 6TnOdcPDdSA11QD4N+9cpyVhsuI36S4aFwZ3QZaN9AYgmwBSKI4+rC9g X-Gm-Gg: AY/fxX5/XMeOd3Oydgr79DF6u35EfpxR+Loxr1L2oBa41qfr/0Rh5PZ3WVtgDPUrhZK v6gtOxRxfeJeON2o7snJBVWBH6VLJ2TCYQbuNotDok0gIlQeqkv/q7y7p3XmopJ6ffVtY6+xyMg ZMObTT06SowL6cnNxzhVx3S6TWwL/7aYeUZSdBXaFVbGeF7Q+6Hye3f9dTbDmphUkq6p2cdAYor 3onkMEWUpiArlZvGCN7C5rmsy+S72Ae9Ul/to1HyTRUwZ/zz7SGNGtBTmSaOLNhcE5QqLJxj+a5 41nI2Ksx0CILhDJXXxTH48MlJfaABLhvC3e7UaZUAdqHIKYFVV7gpYuqDN5+M8a/4QcgLhjeuoM Q3NWcSla/M2BY1Tddx91HJN8GrCMYr+7deOy+2LriGh/FIM0yGXli3Gq7/Fo8W9oIxjK8KAYuLF oSQ5ZL8RY= X-Google-Smtp-Source: AGHT+IEddj/82P4jjOenNTBnyv2Kpfd/suxVKnzAfhNinhSbMX/D6nhziugwcjp5lpYhZqwvppV+9w== X-Received: by 2002:a05:690c:c85:b0:786:87b1:9635 with SMTP id 00721157ae682-790b57588e4mr15407607b3.9.1767768289694; Tue, 06 Jan 2026 22:44:49 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.44.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:44:49 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 04/11] bpf: support fsession for bpf_session_is_return Date: Wed, 7 Jan 2026 14:43:45 +0800 Message-ID: <20260107064352.291069-5-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If fsession exists, we will use the bit (1 << BPF_TRAMP_M_IS_RETURN) in ctx[-1] to store the "is_return" flag. Introduce the function bpf_fsession_is_return(), which is used to tell if it is fexit currently. Meanwhile, inline it in the verifier. The calling to bpf_session_is_return() will be changed to bpf_fsession_is_return() in verifier for fsession. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- 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 | 5 +++++ kernel/bpf/verifier.c | 15 ++++++++++++++- kernel/trace/bpf_trace.c | 34 +++++++++++++++++++++++----------- 3 files changed, 42 insertions(+), 12 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 565ca7052518..d996dd390681 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1229,6 +1229,9 @@ enum { #endif }; =20 +#define BPF_TRAMP_M_NR_ARGS 0 +#define BPF_TRAMP_M_IS_RETURN 8 + struct bpf_tramp_links { struct bpf_tramp_link *links[BPF_MAX_TRAMP_LINKS]; int nr_links; @@ -3945,4 +3948,6 @@ static inline int bpf_map_check_op_flags(struct bpf_m= ap *map, u64 flags, u64 all return 0; } =20 +bool bpf_fsession_is_return(void *ctx); + #endif /* _LINUX_BPF_H */ diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index bfff3f84fd91..d3709edd0e51 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -12374,6 +12374,7 @@ enum special_kfunc_type { KF_bpf_arena_alloc_pages, KF_bpf_arena_free_pages, KF_bpf_arena_reserve_pages, + KF_bpf_session_is_return, }; =20 BTF_ID_LIST(special_kfunc_list) @@ -12451,6 +12452,7 @@ BTF_ID(func, bpf_task_work_schedule_resume_impl) BTF_ID(func, bpf_arena_alloc_pages) BTF_ID(func, bpf_arena_free_pages) BTF_ID(func, bpf_arena_reserve_pages) +BTF_ID(func, bpf_session_is_return) =20 static bool is_task_work_add_kfunc(u32 func_id) { @@ -12505,7 +12507,8 @@ get_kfunc_ptr_arg_type(struct bpf_verifier_env *env, struct bpf_reg_state *reg =3D ®s[regno]; bool arg_mem_size =3D false; =20 - if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx]) + if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_return]) return KF_ARG_PTR_TO_CTX; =20 if (argno + 1 < nargs && @@ -22440,6 +22443,9 @@ static int specialize_kfunc(struct bpf_verifier_env= *env, struct bpf_kfunc_desc } else if (func_id =3D=3D special_kfunc_list[KF_bpf_arena_free_pages]) { if (env->insn_aux_data[insn_idx].non_sleepable) addr =3D (unsigned long)bpf_arena_free_pages_non_sleepable; + } else if (func_id =3D=3D special_kfunc_list[KF_bpf_session_is_return]) { + if (prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) + addr =3D (unsigned long)bpf_fsession_is_return; } desc->addr =3D addr; return 0; @@ -22558,6 +22564,13 @@ 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) { + /* Load nr_args from ctx - 8 */ + insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_M_IS_RETURN); + insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1); + *cnt =3D 3; } =20 if (env->insn_aux_data[insn_idx].arg_prog) { diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 736b32cf2195..9d3bf3bbe8f6 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -3314,6 +3314,12 @@ static u64 bpf_uprobe_multi_entry_ip(struct bpf_run_= ctx *ctx) } #endif /* CONFIG_UPROBES */ =20 +bool bpf_fsession_is_return(void *ctx) +{ + /* This helper call is inlined by verifier. */ + return !!(((u64 *)ctx)[-1] & (1 << BPF_TRAMP_M_IS_RETURN)); +} + __bpf_kfunc_start_defs(); =20 __bpf_kfunc bool bpf_session_is_return(void *ctx) @@ -3334,34 +3340,40 @@ __bpf_kfunc __u64 *bpf_session_cookie(void *ctx) =20 __bpf_kfunc_end_defs(); =20 -BTF_KFUNCS_START(kprobe_multi_kfunc_set_ids) +BTF_KFUNCS_START(session_kfunc_set_ids) BTF_ID_FLAGS(func, bpf_session_is_return) BTF_ID_FLAGS(func, bpf_session_cookie) -BTF_KFUNCS_END(kprobe_multi_kfunc_set_ids) +BTF_KFUNCS_END(session_kfunc_set_ids) =20 -static int bpf_kprobe_multi_filter(const struct bpf_prog *prog, u32 kfunc_= id) +static int bpf_session_filter(const struct bpf_prog *prog, u32 kfunc_id) { - if (!btf_id_set8_contains(&kprobe_multi_kfunc_set_ids, kfunc_id)) + if (!btf_id_set8_contains(&session_kfunc_set_ids, kfunc_id)) return 0; =20 - if (!is_kprobe_session(prog) && !is_uprobe_session(prog)) + if (!is_kprobe_session(prog) && !is_uprobe_session(prog) && + prog->expected_attach_type !=3D BPF_TRACE_FSESSION) return -EACCES; =20 return 0; } =20 -static const struct btf_kfunc_id_set bpf_kprobe_multi_kfunc_set =3D { +static const struct btf_kfunc_id_set bpf_session_kfunc_set =3D { .owner =3D THIS_MODULE, - .set =3D &kprobe_multi_kfunc_set_ids, - .filter =3D bpf_kprobe_multi_filter, + .set =3D &session_kfunc_set_ids, + .filter =3D bpf_session_filter, }; =20 -static int __init bpf_kprobe_multi_kfuncs_init(void) +static int __init bpf_trace_kfuncs_init(void) { - return register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_kprobe_multi_= kfunc_set); + int err =3D 0; + + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_sessi= on_kfunc_set); + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_TRACING, &bpf_sess= ion_kfunc_set); + + return err; } =20 -late_initcall(bpf_kprobe_multi_kfuncs_init); +late_initcall(bpf_trace_kfuncs_init); =20 typedef int (*copy_fn_t)(void *dst, const void *src, u32 size, struct task= _struct *tsk); =20 --=20 2.52.0 From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f193.google.com (mail-yw1-f193.google.com [209.85.128.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5D90828151C for ; Wed, 7 Jan 2026 06:45:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768302; cv=none; b=glg3h+JdqYTAe6FtrWqtcetNjtIXYccKPiwwvfZ/pc8XT8v+auEGt2goq94VIQxarN+a2N1dQRaEt8VWNWIqTIeIPanOOwMChylBbOjgs9zEwPzqtNqQL6SrHT8l1agLQAsr+VbrE40TJVY0UnVtOH0QLOXuyDW88qqcGMoSYk8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768302; c=relaxed/simple; bh=hn8W0ZkaESYLxe1GBfJWcI5Xf7fsdAugM9oC9zAf41A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=GT5u/HrTw+rPK8BPfrS04+nFuNogwLzay5kBAmAhy4ah1dhaZPPYh4pQFdfoaVImQVT8N5TXT+QG/h16p3XYL/DljzZp4EMSS/dQqCuXIdXN7AlgsVIzwrmgM8eVJb53vdT4BsgGmRVPi0L6TCeOjgZ4NC7gULOyhEFCwGgPyjQ= 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=YGuPyU+d; arc=none smtp.client-ip=209.85.128.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YGuPyU+d" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-78fb7704cb4so17353277b3.3 for ; Tue, 06 Jan 2026 22:45:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768299; x=1768373099; 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=fhltP3LSdy4mcdJDqVz74Ak7lLpTineJXeS0W1GM7yc=; b=YGuPyU+d1or37+3jAHRiabpqdGpFenMiJUjjwmclTLTXp5ysL39fz3F9C3yZNAjGQb /G+JoPEGWPbFTzRXvgU1f+DPPvvoL5eLvXJ+9aJMl7wIZhX9JTVWXo1kC6yncpv01DDc tG0W04Tel4nllhz6BQ1pnQ9bTefbWidmC2VnNhZl7IVURxYeX10Qv8Kdj2MtuXM30/ag tHKDmZBGzP5DxylZOprheBIizw6DcglWulRXfhvFwox/PpXWY3XXTqavolCM41gRdF8b UcwGZI+wZ0Z6B+80TwOhddsgMRbOi0kgEOCXtf9UK0DG2c+Wiie+Ty4u7wq8HuIJGjOn BalA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768299; x=1768373099; 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=fhltP3LSdy4mcdJDqVz74Ak7lLpTineJXeS0W1GM7yc=; b=RSbm88UYYJkXl+PxcOX93KVfzqB3aHDgwerDNmMK6JvykCn+WhmdjcwcBNqvvWZ9qg DabqVQMASmI2fSmVwE6DKr2B1siPEimj2Vn14bnybHCje6sLbEzIuzYLGiTAlfFtWkCQ olY0fmZkc0uS641gp+7UpZKZHd3Nts8ICRvLJtSGjbcC+9Nl3kxsVJbsokV6QyP5dx69 ebtruzwgYV1TmkTGdxHuBYUx9iEYy9/D4FGeVVVOuIDSfN/JcQLAzhDrxVhUpbWC6ZFX rwAU+FVohNEVeOqfBEVzET0Jw1wTreqyEMSV6FF9rRwWNTqFKiJ87hyW8oR4fhSIixTh I6tg== X-Forwarded-Encrypted: i=1; AJvYcCXbu7hujJ44XfDbCQqi9gtDtNhd8CAHE6g/5ZInp52ogT/m8uh/jbG9okdyClWVeEe5WNQ2HZne95QQWFg=@vger.kernel.org X-Gm-Message-State: AOJu0Yw04VGMQ1RgZJD1RDlFNQEVqYJprF3q8TL03ptterPMqxc5A5s7 3ECCNZh8Dxpn/RK4TIFintx0WKS5sa75Qajy0tByDowIhkV9JzGG3zQm X-Gm-Gg: AY/fxX6wcwcKPFhrPgc/xZH2b/wYS7gR3NS+6hhixTlHqxbAPvxRCIkqYhoUqIPw2wF qJZFv5iYd86d5/qbGYPm5NNoqypzC6+MN76Uk1zQeXLdaYgYK1jHkoWh5roEA9Bee24IsYXuRPQ NYwfs9Sqluc5iNXwxfULlCW/MSJ2zxABNx/Zumjk/xmtvXMzrHg1G366ZDqxx4CqVFTlP/HT/ED w/d25AX+eT/zOeLlBs+NBk3UA7b0jQGt2ccxvdyBppvfSglpl3L4UFG4vwTQ1xrj8DqFvXYdnlw DxI+wWCJiAnJ0dZ0uLArYnA4s7uL5t2SIaqZGIhQBOU9J78Vo6GMEfqczQW6v0g0CWZ05NIwEYJ jyrvIQyzQ5tPlD546NuiQ7vujVPGGSd6KzKi89+BQYjFGfXwGVCUXcGfEhThtNZtNV4cRpqiYeu vMrK0bTlI= X-Google-Smtp-Source: AGHT+IFkIesbmcZh8GuMCFU5dkAze0Rcy8DMlKkmb+8exYD67FY3ed9jgK/Vbt8TQxR9ep1RMh55Ng== X-Received: by 2002:a05:690c:620e:b0:786:59d3:49c2 with SMTP id 00721157ae682-790b57fe13cmr12844387b3.35.1767768299328; Tue, 06 Jan 2026 22:44:59 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.44.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:44:58 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 05/11] bpf: support fsession for bpf_session_cookie Date: Wed, 7 Jan 2026 14:43:46 +0800 Message-ID: <20260107064352.291069-6-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement session cookie for fsession. In order to limit the stack usage, we make 4 as the maximum of the cookie count. The offset of the current cookie is stored in the "(ctx[-1] >> BPF_TRAMP_M_COOKIE) & 0xFF". Therefore, we can get the session cookie with ctx[-offset]. The stack will look like this: return value -> 8 bytes argN -> 8 bytes ... arg1 -> 8 bytes nr_args -> 8 bytes ip (optional) -> 8 bytes cookie2 -> 8 bytes cookie1 -> 8 bytes Inline the bpf_fsession_cookie() in the verifier too. The calling to bpf_session_cookie() will be changed to bpf_fsession_cookie() in verifier for fsession. Signed-off-by: Menglong Dong --- 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 | 16 ++++++++++++++++ kernel/bpf/trampoline.c | 13 +++++++++++-- kernel/bpf/verifier.c | 19 ++++++++++++++++++- kernel/trace/bpf_trace.c | 8 ++++++++ 4 files changed, 53 insertions(+), 3 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index d996dd390681..31e03886c864 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1231,6 +1231,7 @@ enum { =20 #define BPF_TRAMP_M_NR_ARGS 0 #define BPF_TRAMP_M_IS_RETURN 8 +#define BPF_TRAMP_M_COOKIE 9 =20 struct bpf_tramp_links { struct bpf_tramp_link *links[BPF_MAX_TRAMP_LINKS]; @@ -1783,6 +1784,7 @@ struct bpf_prog { enforce_expected_attach_type:1, /* Enforce expected_attach_type checki= ng at attach time */ call_get_stack:1, /* Do we call bpf_get_stack() or bpf_get_stackid() */ call_get_func_ip:1, /* Do we call get_func_ip() */ + call_session_cookie:1, /* Do we call bpf_session_cookie() */ tstamp_type_access:1, /* Accessed __sk_buff->tstamp_type */ sleepable:1; /* BPF program is sleepable */ enum bpf_prog_type type; /* Type of BPF program */ @@ -2191,6 +2193,19 @@ static inline int bpf_fsession_cnt(struct bpf_tramp_= links *links) return cnt; } =20 +static inline int bpf_fsession_cookie_cnt(struct bpf_tramp_links *links) +{ + struct bpf_tramp_links fentries =3D links[BPF_TRAMP_FENTRY]; + int cnt =3D 0; + + for (int i =3D 0; i < links[BPF_TRAMP_FENTRY].nr_links; i++) { + if (fentries.links[i]->link.prog->call_session_cookie) + cnt++; + } + + return cnt; +} + int bpf_prog_ctx_arg_info_init(struct bpf_prog *prog, const struct bpf_ctx_arg_aux *info, u32 cnt); =20 @@ -3949,5 +3964,6 @@ static inline int bpf_map_check_op_flags(struct bpf_m= ap *map, u64 flags, u64 all } =20 bool bpf_fsession_is_return(void *ctx); +u64 *bpf_fsession_cookie(void *ctx); =20 #endif /* _LINUX_BPF_H */ diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c index 11e043049d68..29b4e00d860c 100644 --- a/kernel/bpf/trampoline.c +++ b/kernel/bpf/trampoline.c @@ -592,6 +592,8 @@ static int bpf_freplace_check_tgt_prog(struct bpf_prog = *tgt_prog) return 0; } =20 +#define BPF_TRAMP_MAX_COOKIES 4 + static int __bpf_trampoline_link_prog(struct bpf_tramp_link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog) @@ -600,7 +602,7 @@ static int __bpf_trampoline_link_prog(struct bpf_tramp_= link *link, struct bpf_tramp_link *link_exiting; struct bpf_fsession_link *fslink; struct hlist_head *prog_list; - int err =3D 0; + int err =3D 0, cookie_cnt =3D 0; int cnt =3D 0, i; =20 kind =3D bpf_attach_type_to_tramp(link->link.prog); @@ -637,11 +639,18 @@ static int __bpf_trampoline_link_prog(struct bpf_tram= p_link *link, /* prog already linked */ return -EBUSY; hlist_for_each_entry(link_exiting, prog_list, tramp_hlist) { - if (link_exiting->link.prog !=3D link->link.prog) + if (link_exiting->link.prog !=3D link->link.prog) { + if (kind =3D=3D BPF_TRAMP_FSESSION && + link_exiting->link.prog->call_session_cookie) + cookie_cnt++; continue; + } /* prog already linked */ return -EBUSY; } + if (link->link.prog->call_session_cookie && + cookie_cnt >=3D BPF_TRAMP_MAX_COOKIES) + return -E2BIG; =20 hlist_add_head(&link->tramp_hlist, prog_list); if (kind =3D=3D BPF_TRAMP_FSESSION) { diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index d3709edd0e51..210af94e3957 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -12508,7 +12508,8 @@ get_kfunc_ptr_arg_type(struct bpf_verifier_env *env, bool arg_mem_size =3D false; =20 if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx] || - meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_return]) + meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_return] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]) return KF_ARG_PTR_TO_CTX; =20 if (argno + 1 < nargs && @@ -14294,6 +14295,9 @@ static int check_kfunc_call(struct bpf_verifier_env= *env, struct bpf_insn *insn, return err; } =20 + if (meta.func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]) + env->prog->call_session_cookie =3D true; + return 0; } =20 @@ -22446,6 +22450,9 @@ static int specialize_kfunc(struct bpf_verifier_env= *env, struct bpf_kfunc_desc } else if (func_id =3D=3D special_kfunc_list[KF_bpf_session_is_return]) { if (prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) addr =3D (unsigned long)bpf_fsession_is_return; + } else if (func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]) { + if (prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) + addr =3D (unsigned long)bpf_fsession_cookie; } desc->addr =3D addr; return 0; @@ -22571,6 +22578,16 @@ static int fixup_kfunc_call(struct bpf_verifier_en= v *env, struct bpf_insn *insn, insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_M_IS_RETURN); insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1); *cnt =3D 3; + } else if (desc->func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]= && + env->prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + /* Load nr_args from ctx - 8 */ + insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_M_COOKIE); + insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFF); + insn_buf[3] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3); + insn_buf[4] =3D BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1); + insn_buf[5] =3D BPF_ALU64_IMM(BPF_NEG, BPF_REG_0, 0); + *cnt =3D 6; } =20 if (env->insn_aux_data[insn_idx].arg_prog) { diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 9d3bf3bbe8f6..4960bb69cb30 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -3320,6 +3320,14 @@ bool bpf_fsession_is_return(void *ctx) return !!(((u64 *)ctx)[-1] & (1 << BPF_TRAMP_M_IS_RETURN)); } =20 +u64 *bpf_fsession_cookie(void *ctx) +{ + /* This helper call is inlined by verifier. */ + u64 off =3D (((u64 *)ctx)[-1] >> BPF_TRAMP_M_COOKIE) & 0xFF; + + return &((u64 *)ctx)[-off]; +} + __bpf_kfunc_start_defs(); =20 __bpf_kfunc bool bpf_session_is_return(void *ctx) --=20 2.52.0 From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f194.google.com (mail-yw1-f194.google.com [209.85.128.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9541225791 for ; Wed, 7 Jan 2026 06:45:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768312; cv=none; b=bg+n+fo1PqZB8+agN3F0g88x9hmbXh598D1Y4lK95SUVXFWFovopwfFJb2Q0mo236W301985d3DDEqVQSyxgBvM1sD9NYxgd9cR8if+QMUAdoqE7mkd9o8q55oD1+ioxkIzbiZTgmsV27+MFT2Nu5P8zByUeNLgUX0D1ZhkEwB8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768312; c=relaxed/simple; bh=Vk+W6eyr2IUQD5U+QNmcmmn6L3jEBra1Cbetb1uK2cc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rN5n8sAUYTO34X76vSHCLJShZDdelawV/uc0rHjKenEPG2T56uQzYsyrjTlAbwtRx/ETtMin1EBY7io6m6CQb4scTj52fKUYwBWUN2FyArjnGraGe3V+DY7LrxUJWnlxnidD4w0Otq/BZYQ29++OVUXauJXyAScIzATHJgVhQqU= 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=TIQmiXRt; arc=none smtp.client-ip=209.85.128.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TIQmiXRt" Received: by mail-yw1-f194.google.com with SMTP id 00721157ae682-7904a401d5cso19796587b3.3 for ; Tue, 06 Jan 2026 22:45:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768310; x=1768373110; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=u6UQnELg0jWNEfAf+zm6n+6F3yec3GYQzyGkx+3yxZQ=; b=TIQmiXRt2uTt9qqqe24xt1OcPrx8wiEG84T1EMbMUEtrTXTpfEj/TzPel86mdTSS9z 1E77EK7nDtaGUKoitXHTCjLFrCml/CClfobFAoJvSQxYETzLhhdEfP2TAG2WbD8TjY2/ wo5tR6Z7UARXkQnDexyRmmyZblhvP/7wAFjt6mIkB3HzknPAyCHEKyjePCzHUe9vW0hq C3wHNv5Qb23Ivo0qQofpC82kQTIe2yqhlmyDng8jd6mcDjBxybxh+gIgn/BLGJy+ZnSi 0tsZNYYo6tvtRYdmAgGAyDyCrAQJnoG9pNofKKuVttQbo3rpYz8CCTCL/M8TgtFGiBAZ kbyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768310; x=1768373110; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=u6UQnELg0jWNEfAf+zm6n+6F3yec3GYQzyGkx+3yxZQ=; b=kILw+CrM3RbYMbHFwyMqsRaTOS6q0z1Vy/3YU0VFm8rWI7fqNgiy+xbw9E7RNZhGZ8 3t7C6C3Oy83UkO+2ODmRKkMibMX2acXi28YuF5NryESnHXTQn1TYgMGCfno/OoW0GY1K 95vJEtWnsitL6vUc29lVSrzU0VOe30ZBKZzVC4pzd+lxwjezxExIF8qnBShKtc5kD7uc Bgt2zFBsr5RpiOQikW0X0BMrETpcmVJ44ggileoiO78NaPLH85vzma00Lq5VPid+ISR3 ShjNiSz3F9Yc39eBbuBQnBhVn6gLx7Odm0gCZbwpOjnVYp/RZUbrUqXCDnjfDP6kmZyi v9Gg== X-Forwarded-Encrypted: i=1; AJvYcCXWfsc3XEdG0EH+PXg39wEuyg/J2tVEyug2yCULszLzmUeXy1vcKSQ+nK+Y+SO4lRrJtmYU4P7YTrhKEcU=@vger.kernel.org X-Gm-Message-State: AOJu0YydKw+PVP0FJD8yTcMMCNSK9CrmwikqCDobTsAaYtrHSRqlpgri lEdLCazqFOAk3m95b537EoPm+0hVne7yCzgttdam088pHxL1mOpM9IUS X-Gm-Gg: AY/fxX4WshWYB2n9uXUr3OttdpwwQ+Mj6ykt4jDusojVJnSZHsnDLlWu+w9t++eU6jB taqN2Ec1MVvMnAFTdESk7vmYCVGv48UniJYwPmxapkZn3uspyX2rssDdr469auhQmYZ0g40dTgh /KL1Y59lbqH88MmsdLRgCExJa9cm52nwp3T2pKr8H6i4Hts9lDUlUdP7V1JDg4lbs+2ZaoI9gxq N/zgLJ+MRIr6ATX9owTtcmlilUWuNutT+s3HEx+BafU0tOBqTFOw9fSfqPx+q3kiH67h8Nz5Ur/ xwxmf7M/+m0ic0+hnxleNqIv+DnKX4yMPO+xsWQwpXVJqLKCj+FJuIU03tMvZ4LQRfbiBjUKgkm m+uuqt5UOxzLt5mQHfptIz/KHHSkXNZkAVd9gcDZazpvsqmNQFF8PZaoN8aj9GvqiUu5YtoQnDT 3oY+Jg4kU= X-Google-Smtp-Source: AGHT+IEMEpmQuL+oH9KFsNmHO15vbwb5Xx/PixbITk1O1HYp4iN8g0LfMEdYn9psD97qbs1NmY/NYQ== X-Received: by 2002:a05:690c:3686:b0:788:f56:afa7 with SMTP id 00721157ae682-790b56a5bcbmr14262217b3.40.1767768309834; Tue, 06 Jan 2026 22:45:09 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.44.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:45:09 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 06/11] bpf,x86: introduce emit_st_r0_imm64() for trampoline Date: Wed, 7 Jan 2026 14:43:47 +0800 Message-ID: <20260107064352.291069-7-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce the helper emit_st_r0_imm64(), which is used to store a imm64 to the stack with the help of r0. Signed-off-by: Menglong Dong --- arch/x86/net/bpf_jit_comp.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index e3b1c4b1d550..a87304161d45 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -1300,6 +1300,15 @@ static void emit_st_r12(u8 **pprog, u32 size, u32 ds= t_reg, int off, int imm) emit_st_index(pprog, size, dst_reg, X86_REG_R12, off, imm); } =20 +static void emit_st_r0_imm64(u8 **pprog, u64 value, int off) +{ + /* mov rax, value + * mov QWORD PTR [rbp - off], rax + */ + emit_mov_imm64(pprog, BPF_REG_0, value >> 32, (u32) value); + emit_stx(pprog, BPF_DW, BPF_REG_FP, BPF_REG_0, -off); +} + static int emit_atomic_rmw(u8 **pprog, u32 atomic_op, u32 dst_reg, u32 src_reg, s16 off, u8 bpf_size) { @@ -3352,16 +3361,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, void *rw_im * mov rax, nr_regs * mov QWORD PTR [rbp - nregs_off], rax */ - emit_mov_imm64(&prog, BPF_REG_0, 0, (u32) nr_regs); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -nregs_off); + emit_st_r0_imm64(&prog, nr_regs, nregs_off); =20 if (flags & BPF_TRAMP_F_IP_ARG) { /* Store IP address of the traced function: * movabsq rax, func_addr * mov QWORD PTR [rbp - ip_off], rax */ - emit_mov_imm64(&prog, BPF_REG_0, (long) func_addr >> 32, (u32) (long) fu= nc_addr); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -ip_off); + emit_st_r0_imm64(&prog, (long)func_addr, ip_off); } =20 save_args(m, &prog, regs_off, false, flags); --=20 2.52.0 From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f195.google.com (mail-yw1-f195.google.com [209.85.128.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 561B227A92E for ; Wed, 7 Jan 2026 06:45:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768323; cv=none; b=tE+NOm4IjzEljB7F9ZT8n+WlimsBoRj5lBvKbl/Y9VxKV4Ra3cyGDfdVhCir8lqWxVyi6KmEC1bkVlyhFI/PO/m0kPq7t1IUTZEbnSd9ZNh6MUK6kBXPVuVlWYznCpYnYpGkkG0TSZ3cg+BUAKNbJzXyISuVSU6KgAR0s3DbMZ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768323; c=relaxed/simple; bh=XHarCaGaxO4UOuhsLfcJy1QlrtGM5hU6MX1y6/kQaWI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AO+WyZVdSrBWI5LFTtryuj7VnbRMccLVuq+UQS+QpwQ1WpIhqpeqRIPdtyGeJcaYo2/Z9ncQBjKRRT3Zz6ENRa9ju66AIk3ihl1m3aczII9juaCd5UnAaYCHgET8ENILSzymP148dMRB4U/Mm33Rigi8TXWvz8c9jq+2zFxdneM= 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=CQlbokat; arc=none smtp.client-ip=209.85.128.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CQlbokat" Received: by mail-yw1-f195.google.com with SMTP id 00721157ae682-78fb6c7874cso21289787b3.0 for ; Tue, 06 Jan 2026 22:45:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768321; x=1768373121; 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=ngssSFUNq6ZVeh2IW9d/LUmz0anO5RIn1dRAez89M0E=; b=CQlbokat5/UVYYMK4IsMfRWSdQl3A2/rbIEzQiKT8rTYqaG/PlMKn58qBZHMJqY6PG pUgWkrQh6YERUCSBtfhEVNBVzGvPTramctImvSD1ANKCLpXA7dGPjRl4VOM3HpoorRlY 9XvyjwpRBtitHXWBghhzpFDsr8D3xnCHdvlkLdP7fo/OQgr0xSICPACCb0KM2geTLDSb MVJg2ffZWfFJ2CsD8N7TgV7jsQhMwews0/cH4mTk53Et0rCZXha7VKaVrKHsJ/dBZBZE 2KqBEpoZ8XborpJ5h1gRAG8W0N21iTMFbBDe5MjhP5/8YeA+SnF/DEviNzulB1+JN7qL /o5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768321; x=1768373121; 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=ngssSFUNq6ZVeh2IW9d/LUmz0anO5RIn1dRAez89M0E=; b=mkEG18V9810BOiGqthkrGaGaK9dJ4d2OvVLX1J/uPbCZQ4NYJHuQ7wI8UBsstv1OVV /jkBPt964rIZq56rBF+amcNXER/eofQX/fivr78FMQ7mC3Uv6x0+zW2MHzUheuyP1u0W LfCTor7tWvpLASWVl6EUkNeYTyAEkaKATfgLCZtYIMQGpYeCX0Yc3eiLkdDT2QAj5MnT SIB49qEIwepWYmqKH8fDAZTtOqjaBkPlnusjDNoIHKkFy4xrigi+mXOSA/WtNs7xzdgC EO8VXR0cNLBQrIt0rYSnKqxZR2qLNXgIhUlU2niUXjb9vhVJOjPpNKzamiZPjpOSNRR2 NuBw== X-Forwarded-Encrypted: i=1; AJvYcCUZMPSHtZ9nl/3DNzARILDvE1BzN5NQhVCz8Sqhzt6Yw2j4inytZUhcUJbcQj4Xg2vnO9xSileA/oyn1ls=@vger.kernel.org X-Gm-Message-State: AOJu0YyUuA9WUueuR2D5UHyQvw+hBzQjeSE+q/qH6tQnAQz0rde2kD31 30jK8WquI4JJLlXJky98t8zdXnVT/U17F3V3AVLPatmbx+Nb3b0+f839 X-Gm-Gg: AY/fxX6rXVyZUvniOzUNay6m5AyoGWQvczl7Qb3oQ2tUl5BbZDzoNes+LXBOyqvVubh dU9fryLztiTEc1aTYe1opjk3C7LhrGTAiLBKV3YMjTJIFjlUedY8lcHsKlF8v1R5eCz2/cU72mg GSu+GCTLNd2CCouJnNOoLvpIirWD0DFO78dVQsqCLvnmP/21Rv2h73+Thw3z1zTVcfXfqgf0asJ rnu15EMe6TN66zI50r/KFDdLRfk3ZQCetlzrF+t44MomIhxnkBpBc2Ghn0bRfrbdFjQFxjF7FhN +Nr6t2kXNKwfo7VzlldDObOz8tBrt6Up326nMUItOcEadqSKq1ddOelcHRR8O/cv9gzL3NMcuDo gatCCDHoTTRZo/Zb5eT/6RI0OWoRCCKRq5HtvaAN9s2n0aaLofjaWuA3WHRo7e7JMQRYZrRHMWd J6p9/88vq2NzmOjndxfA== X-Google-Smtp-Source: AGHT+IFQwZ8JqUgzAhI97yEdL+gAVwRf+HPm2jxhPz+VXVx31xofYms+tNraAMtA1CL3y+eUpP+gmA== X-Received: by 2002:a05:690c:c85:b0:784:aec5:7042 with SMTP id 00721157ae682-790b567cc26mr18001097b3.38.1767768321214; Tue, 06 Jan 2026 22:45:21 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.45.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:45:20 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 07/11] bpf,x86: add fsession support for x86_64 Date: Wed, 7 Jan 2026 14:43:48 +0800 Message-ID: <20260107064352.291069-8-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add BPF_TRACE_FSESSION supporting to x86_64, including: 1. clear the return value in the stack before fentry to make the fentry of the fsession can only get 0 with bpf_get_func_ret(). 2. clear all the session cookies' value in the stack. 2. store the index of the cookie to ctx[-1] before the calling to fsession 3. store the "is_return" flag to ctx[-1] before the calling to fexit of the fsession. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v5: - add the variable "func_meta" - define cookie_off in a new line v4: - some adjustment to the 1st patch, such as we get the fsession prog from fentry and fexit hlist - remove the supporting of skipping fexit with fentry return non-zero v2: - add session cookie support - add the session stuff after return value, instead of before nr_args --- arch/x86/net/bpf_jit_comp.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index a87304161d45..32c13175bc65 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -3094,12 +3094,17 @@ static int emit_cond_near_jump(u8 **pprog, void *fu= nc, void *ip, u8 jmp_cond) static int invoke_bpf(const struct btf_func_model *m, u8 **pprog, struct bpf_tramp_links *tl, int stack_size, int run_ctx_off, bool save_ret, - void *image, void *rw_image) + void *image, void *rw_image, u64 func_meta) { int i; u8 *prog =3D *pprog; =20 for (i =3D 0; i < tl->nr_links; i++) { + if (tl->links[i]->link.prog->call_session_cookie) { + /* 'stack_size + 8' is the offset of func_md in stack */ + emit_st_r0_imm64(&prog, func_meta, stack_size + 8); + func_meta -=3D (1 << BPF_TRAMP_M_COOKIE); + } if (invoke_bpf_prog(m, &prog, tl->links[i], stack_size, run_ctx_off, save_ret, image, rw_image)) return -EINVAL; @@ -3222,7 +3227,9 @@ static int __arch_prepare_bpf_trampoline(struct bpf_t= ramp_image *im, void *rw_im struct bpf_tramp_links *fexit =3D &tlinks[BPF_TRAMP_FEXIT]; struct bpf_tramp_links *fmod_ret =3D &tlinks[BPF_TRAMP_MODIFY_RETURN]; void *orig_call =3D func_addr; + int cookie_off, cookie_cnt; u8 **branches =3D NULL; + u64 func_meta; u8 *prog; bool save_ret; =20 @@ -3290,6 +3297,11 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im =20 ip_off =3D stack_size; =20 + cookie_cnt =3D bpf_fsession_cookie_cnt(tlinks); + /* room for session cookies */ + stack_size +=3D cookie_cnt * 8; + cookie_off =3D stack_size; + stack_size +=3D 8; rbx_off =3D stack_size; =20 @@ -3383,9 +3395,19 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im } } =20 + if (bpf_fsession_cnt(tlinks)) { + /* clear all the session cookies' value */ + for (int i =3D 0; i < cookie_cnt; i++) + emit_st_r0_imm64(&prog, 0, cookie_off - 8 * i); + /* clear the return value to make sure fentry always get 0 */ + emit_st_r0_imm64(&prog, 0, 8); + } + func_meta =3D nr_regs + (((cookie_off - regs_off) / 8) << BPF_TRAMP_M_COO= KIE); + if (fentry->nr_links) { if (invoke_bpf(m, &prog, fentry, regs_off, run_ctx_off, - flags & BPF_TRAMP_F_RET_FENTRY_RET, image, rw_image)) + flags & BPF_TRAMP_F_RET_FENTRY_RET, image, rw_image, + func_meta)) return -EINVAL; } =20 @@ -3445,9 +3467,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im } } =20 + /* set the "is_return" flag for fsession */ + func_meta +=3D (1 << BPF_TRAMP_M_IS_RETURN); + if (bpf_fsession_cnt(tlinks)) + emit_st_r0_imm64(&prog, func_meta, nregs_off); + if (fexit->nr_links) { if (invoke_bpf(m, &prog, fexit, regs_off, run_ctx_off, - false, image, rw_image)) { + false, image, rw_image, func_meta)) { ret =3D -EINVAL; goto cleanup; } --=20 2.52.0 From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f195.google.com (mail-yw1-f195.google.com [209.85.128.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 389A12765D2 for ; Wed, 7 Jan 2026 06:45:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768333; cv=none; b=qrKQQLvpjp+SHlnZV3HgNdlJ+nKntPDTl7O3NuXRPAKpS/Ja9xc2oirEZEjzsAndlZ2kPvqHRQ9mywqEIYsE4c3ZSqH6oEehV4uSULy6VH5sQmQrshy4jrBu4hu/AgW30DCmmtPjpEdSxONMtPJPGp179XwXohsEeOq4UFu3WuU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768333; c=relaxed/simple; bh=38EFZU9SO7U6LMxWk1zoyW+hWkQLuXnfoO/nf75J5dg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bGmwniLzxyqzbkd/wNbC7jJg1mxSeHUyM8F/gP58mkBmSqHYvMIiyTZewJeH1MLlqQ+kFJxhr9QuG9iw6UP/+mrkWR/8GsY/FGiiRVphPep5u4J6RXeJUXMSsWPy83VIYevUT++t+7et3wIQ31nTK7amgmyac2L12obg0fJawBY= 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=BaJSl8lu; arc=none smtp.client-ip=209.85.128.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BaJSl8lu" Received: by mail-yw1-f195.google.com with SMTP id 00721157ae682-78fc7893c93so18860107b3.2 for ; Tue, 06 Jan 2026 22:45:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768331; x=1768373131; 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=YRIQ7Wgt3vABzQydK8+/8/bPVfaCrBmV63dZ8jFFcOQ=; b=BaJSl8luWFvtDGIlpT/STPAI2o3YYzgG6gCSEY/emyY8+2Sfj2K9UCRhA/7YmCEx0W 6jVyEBbcZXMP1qoJvxsRJuWW+FaZskPNxprnEwX2UQwo+xFMUEPw2vkIf8q1B2SoLajt 52VU9tFQw0arCwo/FWqZ51EokeafcoN15OHBAo6qAj3cLLeNoZ4YoCltrh3ytOXxmheE 6+vIgxmycul4JvQLj+kkGins/XTWMjgxlZ/K3NoREsF5UtJq+apdzc3Na9UkRoXFjDsO Tg52pbx4ZTsAqqcssyLgR/4mQASiLJ5/DB6OGSB6Y9mHhcXnMp1Q3f5Nu0Ft8zRHJlVm GmFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768331; x=1768373131; 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=YRIQ7Wgt3vABzQydK8+/8/bPVfaCrBmV63dZ8jFFcOQ=; b=XnpoA9QY2WPujGbd9HEPLEzVIt0Xg9Uag9dwdet5PpyGV+m8bg27Bb4xYCDPS28ymp J8Gn2fNR5/yiW2dmZyD9Wc2UdbBWTpYEFouA58BpByC2GJFDOp+30DJLuG0YMMcXIUII BetuV79MuGQwQnSPfmLdxkPl20dcuvXm7MisQorh5ERe5DMvX+k/fKaUtI2UIYD/b8b9 x7hYdVp0wThYyYoOs3nh0WQkc9E2czrPo1cPn5+E5cu88kBkz9HkJVy/Zpv6Gmt9XavV nQyND87mmiI1dUlmCkXEC+9pYQPLJ/WvjzBCW+JCVkdg90T6sQ+okh52Ws8OSXpn4DSz I0yA== X-Forwarded-Encrypted: i=1; AJvYcCXU1p95AHk2WGCf8YYkheCrWUm34Gd3pBUtJ1brlHyjSYZHTkMTnJmAM0sFJimOzZN0ULUucdyF1tPFc44=@vger.kernel.org X-Gm-Message-State: AOJu0YzhLcOIOxmUlfRe8jSIgHwMSZV1t7b239LJAqjihR+GV0ATiG6N tALTNQIf0UILK/0jf5qNlLbKRhCGvmeKzEVXpseR1esXcvxMw3AKbPOU X-Gm-Gg: AY/fxX7heZA1v/h7c64e50AmE74JUW8Pw3NgCpyRE9KPNU4sLxAD9wqbvjzvK1B//CL m5j6DhiIDl+HfVVJXVosGJUe6BOpdw7hyx10vwvE71hfuxi/4strZs6tIhYBduSOUIvlasH+VVP ndxSPXeJRnbWXSEYNQXzuNphCP9ybmnTtWrkn7iHDsTv39e7GNFZ5KAu/a0I3oFEgz37rBJMcFJ v7p2vLQ2ZtJbdMV9GISEzYM4Qo/gUrmbdzKcSh890uqH2H94E6ScWcw1UouZ2rRYDoUZ88lchju DE21scbKkQRXaPfogNUxxfHNLSPbrC76b3P++fW/3g3WVii1Vmr/SP7QALuzzfLfuehc+OJt0Ko /7K7twtv6YSD9ZWrVFBD5lEuZvpZ9PGx1DnNEvHYrILZrZnHmtvlCi3RXjD07PQZl6ILrlVkZQZ mYdh8vGSE= X-Google-Smtp-Source: AGHT+IGRWEofOcq5wuRI9ET+y4onyXMcVVrrexW6pEOpfZocA/LjmKomcwJLUi2JlI2SIEYuiekAAQ== X-Received: by 2002:a05:690e:1405:b0:647:108c:15e with SMTP id 956f58d0204a3-64716c38402mr1382110d50.54.1767768330922; Tue, 06 Jan 2026 22:45:30 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.45.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:45:30 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 08/11] libbpf: add fsession support Date: Wed, 7 Jan 2026 14:43:49 +0800 Message-ID: <20260107064352.291069-9-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add BPF_TRACE_FSESSION to libbpf and bpftool. Signed-off-by: Menglong Dong --- v5: - remove the handling of BPF_TRACE_SESSION in legacy fallback path for BPF_RAW_TRACEPOINT_OPEN - use fsession terminology consistently --- tools/bpf/bpftool/common.c | 1 + tools/lib/bpf/bpf.c | 1 + tools/lib/bpf/libbpf.c | 3 +++ 3 files changed, 5 insertions(+) diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c index e8daf963ecef..8bfcff9e2f63 100644 --- a/tools/bpf/bpftool/common.c +++ b/tools/bpf/bpftool/common.c @@ -1191,6 +1191,7 @@ const char *bpf_attach_type_input_str(enum bpf_attach= _type t) case BPF_TRACE_FENTRY: return "fentry"; case BPF_TRACE_FEXIT: return "fexit"; case BPF_MODIFY_RETURN: return "mod_ret"; + case BPF_TRACE_FSESSION: return "fsession"; case BPF_SK_REUSEPORT_SELECT: return "sk_skb_reuseport_select"; case BPF_SK_REUSEPORT_SELECT_OR_MIGRATE: return "sk_skb_reuseport_select_= or_migrate"; default: return libbpf_bpf_attach_type_str(t); diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index 21b57a629916..5846de364209 100644 --- a/tools/lib/bpf/bpf.c +++ b/tools/lib/bpf/bpf.c @@ -794,6 +794,7 @@ int bpf_link_create(int prog_fd, int target_fd, case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: case BPF_MODIFY_RETURN: + case BPF_TRACE_FSESSION: case BPF_LSM_MAC: attr.link_create.tracing.cookie =3D OPTS_GET(opts, tracing.cookie, 0); if (!OPTS_ZEROED(opts, tracing)) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 1a52d818a76c..89d6f45ef058 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -115,6 +115,7 @@ static const char * const attach_type_name[] =3D { [BPF_TRACE_FENTRY] =3D "trace_fentry", [BPF_TRACE_FEXIT] =3D "trace_fexit", [BPF_MODIFY_RETURN] =3D "modify_return", + [BPF_TRACE_FSESSION] =3D "trace_fsession", [BPF_LSM_MAC] =3D "lsm_mac", [BPF_LSM_CGROUP] =3D "lsm_cgroup", [BPF_SK_LOOKUP] =3D "sk_lookup", @@ -9859,6 +9860,8 @@ static const struct bpf_sec_def section_defs[] =3D { SEC_DEF("fentry.s+", TRACING, BPF_TRACE_FENTRY, SEC_ATTACH_BTF | SEC_SLE= EPABLE, attach_trace), SEC_DEF("fmod_ret.s+", TRACING, BPF_MODIFY_RETURN, SEC_ATTACH_BTF | SEC_= SLEEPABLE, attach_trace), SEC_DEF("fexit.s+", TRACING, BPF_TRACE_FEXIT, SEC_ATTACH_BTF | SEC_SLEEP= ABLE, attach_trace), + SEC_DEF("fsession+", TRACING, BPF_TRACE_FSESSION, SEC_ATTACH_BTF, attach= _trace), + SEC_DEF("fsession.s+", TRACING, BPF_TRACE_FSESSION, SEC_ATTACH_BTF | SEC= _SLEEPABLE, attach_trace), SEC_DEF("freplace+", EXT, 0, SEC_ATTACH_BTF, attach_trace), SEC_DEF("lsm+", LSM, BPF_LSM_MAC, SEC_ATTACH_BTF, attach_lsm), SEC_DEF("lsm.s+", LSM, BPF_LSM_MAC, SEC_ATTACH_BTF | SEC_SLEEPABLE, atta= ch_lsm), --=20 2.52.0 From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f194.google.com (mail-yw1-f194.google.com [209.85.128.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3AE1A28135D for ; Wed, 7 Jan 2026 06:45:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768344; cv=none; b=pEgQo4OvTPpNQtnRwIBbcLDSaCn4I2IXh1O1RfGSuPr+it4bTicmKL9p1z/uCOYPmX9udMxPAJ21pK3A/iqWIIOkNPV97M87thdtwqIVuGB4mnB7F852W8gevL2RHZ/rVlAeizDr9dK6RN9o2c6heljEYplDph472wP0/pizHlE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768344; c=relaxed/simple; bh=Okg9SIzWIdxMYL9OMbZo8y/oAOt76F10doefVGdAQU8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kJCDQBT6ZqaOZFTh4SoHheoK7smKt3ybmQwjgDDKuTij17JQmeGBYC47vAq7vBOExcXi49RZMgc2U9TG8jTSlauJ2fxP7rD9mDJNB6pikanIii/NyguUQvhaGCqdQ954bpQyAmO4Q7fJxJS4yeofCC/rmeWKiAUPSZlLqrd9KNQ= 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=iNnU4Kjx; arc=none smtp.client-ip=209.85.128.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iNnU4Kjx" Received: by mail-yw1-f194.google.com with SMTP id 00721157ae682-78fba1a1b1eso9105757b3.1 for ; Tue, 06 Jan 2026 22:45:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768341; x=1768373141; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QR5rrRd0ZsuEPPqW5q3lZCBR9ClfGRJ1620B6u4R4tA=; b=iNnU4KjxTg9BpN7YgV2IoulY9mDKYeI52syYf1cGyHH7iFrlBkzvnUKZK8z+3DSOg+ /ijgL8cpOPvIWZzdcMwNpgmJ+7J/MadqSlMV5ajJ8rGyrKTmV0sg3tAmCCaXgsZpmpsf YLieVpi7JoQIhSf1tNS8SCjd5Kx31gTiZ0qxrqgpQZO8DymFmcqC/dkBzLnIBAF5LvFy Y9fcRqdH92+OzVkkodACkbLbJrSBs5Lo51m27VXTk0L0yuaS6k9Ko678okw6+XoBTZ88 KqIWDc5xM2xpF4z/MCS0ULRQUEjfbh7Xxaev0o5S0/XEXJUI7zmJO46phLBjeeo1Rqzb kUkQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768341; x=1768373141; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=QR5rrRd0ZsuEPPqW5q3lZCBR9ClfGRJ1620B6u4R4tA=; b=HW6axXTBIGWaKUdcnpyMrlTDMbT+fBxQO/t07iD2XnpE2ExLGi7xMjKSTYFMoqcbMv fJOgYBYRQSvMVn4SEfgp1SK5Xinr1Bk2u9xmfubSPM19ILra+k+7riaooBDrDUq8KE6q 6kPz8nApVT5VmugkAlYJdmn4Te3zKwLqXjyD4RNvPIbxWi/gZlw12aOvPO+6vYbZaANE b8ol2Nneo0aZMDdFZKsPHxBXh4GKaRccgwBkCHgpERCkOBaiOub+1k/0PcP4euDnZxxj Yc0NfPauVqLOy9G0ZAc7vBKRar+f8AnIMVMxb1nmWQDwfq4Do01UFU8aUjJhPjRt2gXK tXdQ== X-Forwarded-Encrypted: i=1; AJvYcCXmuXXoh36WvlBhuwRMK615OWO/g76Sw3ucZ1M8+mwD78gncSnELYpdzlJbC/V3kGJk3cYd3IKDUnG3JvQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yxi3YlYPV7x46ihm46lZXoIP+ICpeHLz+cp2sukPm2jJOKP6flb sveVdG//ADkd40Zs24TfzJVTl9XMxAxxklOG6zgXvnqgPRJKCAQBty4f X-Gm-Gg: AY/fxX6CmYd+rgQ5b3s5zX1u56ZpJHK+/Hd+ynt2jb41480PfogCDrBEwh8CzQNQ9X9 gUlOyFjM1xBDPUS6L2+CouuxAcw0a6RhUH9v0tWSOZ1Ef7CKpTXIEpNdvzir0KkjH9ogvTUpO/B UEMrJ4ffzArcFjMzg7mGv6tXGeIVxwHxm7tFtRq3xI3ThxMaq1OzDUQyG3IufjWTkhdA2SnUrNn gdh4MDivi5uatdQy2glP6kyDjK6kDeOQpEe+XykitnJgW6qxxMytbOGefvZXt0Z7Xr3fLH3WLnI peesD2lxboQbSiRApeNmWVMyu51Utk8eKhMGawweUxRDUUUpj+9+OMSy0T3tJ1I3JtErKFXGZW7 PVa3aJ9CFqj701Ov3yTD09oqOJVovexl75OZSF8CQHa5iFcp01mxHDZH8xkvLpRaRo/tF/TGA+j CooCoHxZc= X-Google-Smtp-Source: AGHT+IGSawnCd1w8NLNeXq8X76q4ov6YkS5+hhYjNtOJFH0IbJy38YLLa8nhZKa7aXJeFe/5VPkNTw== X-Received: by 2002:a05:690c:64c4:b0:78f:c2f3:16d with SMTP id 00721157ae682-790b57fb6camr13847587b3.20.1767768341325; Tue, 06 Jan 2026 22:45:41 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.45.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:45:40 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 09/11] selftests/bpf: add testcases for fsession Date: Wed, 7 Jan 2026 14:43:50 +0800 Message-ID: <20260107064352.291069-10-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add testcases for BPF_TRACE_FSESSION. The function arguments and return value are tested both in the entry and exit. And the kfunc bpf_session_is_ret() is also tested. As the layout of the stack changed for fsession, so we also test bpf_get_func_ip() for it. Signed-off-by: Menglong Dong --- v3: - restructure the testcase by combine the testcases for session cookie and get_func_ip into one patch --- .../selftests/bpf/prog_tests/fsession_test.c | 90 ++++++++++++++ .../selftests/bpf/progs/fsession_test.c | 110 ++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 tools/testing/selftests/bpf/prog_tests/fsession_test.c create mode 100644 tools/testing/selftests/bpf/progs/fsession_test.c diff --git a/tools/testing/selftests/bpf/prog_tests/fsession_test.c b/tools= /testing/selftests/bpf/prog_tests/fsession_test.c new file mode 100644 index 000000000000..83f3953a1ff6 --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/fsession_test.c @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2025 ChinaTelecom */ +#include +#include "fsession_test.skel.h" + +static int check_result(struct fsession_test *skel) +{ + LIBBPF_OPTS(bpf_test_run_opts, topts); + int err, prog_fd; + + /* Trigger test function calls */ + prog_fd =3D bpf_program__fd(skel->progs.test1); + err =3D bpf_prog_test_run_opts(prog_fd, &topts); + if (!ASSERT_OK(err, "test_run_opts err")) + return err; + if (!ASSERT_OK(topts.retval, "test_run_opts retval")) + return topts.retval; + + for (int i =3D 0; i < sizeof(*skel->bss) / sizeof(__u64); i++) { + if (!ASSERT_EQ(((__u64 *)skel->bss)[i], 1, "test_result")) + return -EINVAL; + } + + return 0; +} + +static void test_fsession_basic(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open_and_load(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open_and_load")) + goto cleanup; + + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_attach")) + goto cleanup; + + check_result(skel); +cleanup: + fsession_test__destroy(skel); +} + +static void test_fsession_reattach(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open_and_load(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open_and_load")) + goto cleanup; + + /* First attach */ + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_first_attach")) + goto cleanup; + + if (check_result(skel)) + goto cleanup; + + /* Detach */ + fsession_test__detach(skel); + + /* Reset counters */ + memset(skel->bss, 0, sizeof(*skel->bss)); + + /* Second attach */ + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_second_attach")) + goto cleanup; + + if (check_result(skel)) + goto cleanup; + +cleanup: + fsession_test__destroy(skel); +} + +void test_fsession_test(void) +{ +#if !defined(__x86_64__) + test__skip(); + return; +#endif + if (test__start_subtest("fsession_basic")) + test_fsession_basic(); + if (test__start_subtest("fsession_reattach")) + test_fsession_reattach(); +} diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c new file mode 100644 index 000000000000..f504984d42f2 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2025 ChinaTelecom */ +#include +#include +#include + +char _license[] SEC("license") =3D "GPL"; + +__u64 test1_entry_result =3D 0; +__u64 test1_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test1, int a, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test1_entry_result =3D a =3D=3D 1 && ret =3D=3D 0; + return 0; + } + + test1_exit_result =3D a =3D=3D 1 && ret =3D=3D 2; + return 0; +} + +__u64 test2_entry_result =3D 0; +__u64 test2_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test3") +int BPF_PROG(test2, char a, int b, __u64 c, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test2_entry_result =3D a =3D=3D 4 && b =3D=3D 5 && c =3D=3D 6 && ret =3D= =3D 0; + return 0; + } + + test2_exit_result =3D a =3D=3D 4 && b =3D=3D 5 && c =3D=3D 6 && ret =3D= =3D 15; + return 0; +} + +__u64 test3_entry_result =3D 0; +__u64 test3_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test4") +int BPF_PROG(test3, void *a, char b, int c, __u64 d, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test3_entry_result =3D a =3D=3D (void *)7 && b =3D=3D 8 && c =3D=3D 9 &&= d =3D=3D 10 && ret =3D=3D 0; + return 0; + } + + test3_exit_result =3D a =3D=3D (void *)7 && b =3D=3D 8 && c =3D=3D 9 && d= =3D=3D 10 && ret =3D=3D 34; + return 0; +} + +__u64 test4_entry_result =3D 0; +__u64 test4_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test5") +int BPF_PROG(test4, __u64 a, void *b, short c, int d, __u64 e, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test4_entry_result =3D a =3D=3D 11 && b =3D=3D (void *)12 && c =3D=3D 13= && d =3D=3D 14 && + e =3D=3D 15 && ret =3D=3D 0; + return 0; + } + + test4_exit_result =3D a =3D=3D 11 && b =3D=3D (void *)12 && c =3D=3D 13 &= & d =3D=3D 14 && + e =3D=3D 15 && ret =3D=3D 65; + return 0; +} + +__u64 test5_entry_result =3D 0; +__u64 test5_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test7") +int BPF_PROG(test5, struct bpf_fentry_test_t *arg, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + if (!arg) + test5_entry_result =3D ret =3D=3D 0; + return 0; + } + + if (!arg) + test5_exit_result =3D 1; + return 0; +} + +__u64 test6_entry_result =3D 0; +__u64 test6_exit_result =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test6, int a) +{ + __u64 addr =3D bpf_get_func_ip(ctx); + + if (bpf_session_is_return(ctx)) + test6_exit_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + else + test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + return 0; +} --=20 2.52.0 From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f193.google.com (mail-yw1-f193.google.com [209.85.128.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0431F2BE7AC for ; Wed, 7 Jan 2026 06:45:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768353; cv=none; b=a/+9OGH2v3ZH1do1CYvrGGzaYkUWcxmlwkrZouIFgV8bVtSnzauX5HZUCTI8pgyZ0HdpA80zsnj9eLcXPX7dtwQ9I0iyXGuSqhCpX7QjOHnP2MoO+4SWJ+CvP1e3mHKUUyt14zxFWm+31UPChmq64bnQZN2uh0xYZY1Q+wOAH1g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768353; c=relaxed/simple; bh=gXCuEnHLqfXsAH6FAwsjxm9SB5MyEaZI5cp68UEcCxA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dXMK3Z9VJrVAid/+lUiXuzleYw+aOfe7AeMZHTecTanhKW6czz/3zyPrpDR3PoN4zzQ99jfxvn0RILY6RHSVlHkK6/jsIZhpAkU8Cw/9j3qLzuNxTwOR9MGk8syoaXDLJ6P0a3asqAozxXPwZ4FSIgOY6l8ssqWE6eB9xd7EoUM= 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=OLk4fZ3G; arc=none smtp.client-ip=209.85.128.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="OLk4fZ3G" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-78fc4425b6bso18424787b3.1 for ; Tue, 06 Jan 2026 22:45:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768351; x=1768373151; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=V0oqk3QUBfKZsQ1aXSAR/rKLECXiTolyzvGw8W9Eifk=; b=OLk4fZ3GjbQr2LNTSf/r+QXaDUr5FWJ5THsDhrzOybt6jDt7jiIouDfS7Tpbo8/HMo WTzj6NQDmbdLxQTI5Vre77hz1BdhvslwVYAECyrneGFQqMBDeJVp1OX2Tg5kDtvsO9rV qb4NeaxZL8RU76nDF0kkX9y1JJqpGRcKPZw/57WAUSKDpiJrmAZpWMpIb46jtxjcVo/m uJGSmrwKEVlk83PAiJWSeqzQRBjiq19L+EfRo37QwxkOHX1vuDAZJ4e2ki/oUEn/BGJw 2BXYK16d5SYvVjvFPbuWddfHfkMREVk1v/Ljrah0hO00t/Tfjk5JGYwFS6x9jHbXgwa4 DS8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768351; x=1768373151; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=V0oqk3QUBfKZsQ1aXSAR/rKLECXiTolyzvGw8W9Eifk=; b=UW6HpHakbD442av2yEsbCHrpoZdUhhwH1svL45u+5NvJzX5ifDLTqb6knlUVaYFqjJ i15p4vc20D8NSbohgzpTiyypeXNoL92uqu7vEpikBXb+DWx5fOR4bMapfieUjH8QoXnd MDmRqPMRoR3ohLyUIptQo5coNMP85ih/usi7ZNaBAWWSyWjKQ+8xCVydtW73XtGmf7lU CfCAXsafLUQov1NDDWOlGr0OZD0xjqeuYnHM4HTFwGxJHN8wZzhKskjSXk5NA2PfHucg 4o14pZqeNrWowMcHOpFF/Okr6kP+5LqYEsIBKpw/vwbWQvSGNdUiISCBVy9EYIBmJ8nV 3ZSw== X-Forwarded-Encrypted: i=1; AJvYcCWe7j9rVDw3wOd/MHLHtkhVY8A6CVmDZcd5r3/WDjn+NmqUEYS4QpaPcQJrSsul6iyYMa9JnNUfZ5/nt7o=@vger.kernel.org X-Gm-Message-State: AOJu0YwVP1HNHun3HRkTJnLlZyT0LUpftN4k+pD/RA273q1lrktpqV9Z 3pskKbClct5JO2TGBWcf8itvVD520ZH/p4WBnyDTtGYDMdWyVOn4U4L3 X-Gm-Gg: AY/fxX5ivqr6sVEMMwepGe7i6IG8oaB3UrTW+auHjS6bl9Y2hoLUdJ1h3a27pPPMdVH b2FPLHrituMUvSZawfBx49ylnLx6iZgQWajIZc2fQQUNJxtj7AJ5w+sBylRAISIRBinXFNrhRZ6 HqIJWQl5M09vIzGBujt+QyUxz0lVyj0sHniHFyhkz0EhFo+LUSyb8sycisekDzO21k7+cPML6gK LEdsoQ5xfkkePRY6uAfAfndTqDoeoyYGXnFeXVjlg2Ik5M14V6Pr4+mPtynNSjUwux7S/oYpguC 9NOhOIv25StuHG8b079GhAucYVPs4f6ZGlKj47sPr1NyG1F36I8wE9reGGacpBQ6/a9s5wiIuPc btz2zuz6bwwbsza764qzlvTwupu1Qglk9mklBjAGV2c4s/uRwFrJcRTZ0CAAj8MP0upZ/OhluAR e2QY/G8Ok= X-Google-Smtp-Source: AGHT+IHMifI7034zc2YBt79WxlXBE/YcCt485G3onMhXwhhsMw8KLx2Ddjp8zBhrqNHrFRl6QB+UyA== X-Received: by 2002:a05:690e:1248:b0:646:7c7a:c5d8 with SMTP id 956f58d0204a3-64716c67bd6mr1480927d50.61.1767768350995; Tue, 06 Jan 2026 22:45:50 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.45.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:45:50 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 10/11] selftests/bpf: add testcases for fsession cookie Date: Wed, 7 Jan 2026 14:43:51 +0800 Message-ID: <20260107064352.291069-11-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Test session cookie for fsession. Multiple fsession BPF progs is attached to bpf_fentry_test1() and session cookie is read and write in the testcase. Signed-off-by: Menglong Dong --- v3: - restructure the testcase by combine the testcases for session cookie and get_func_ip into one patch --- .../selftests/bpf/prog_tests/fsession_test.c | 25 +++++++ .../selftests/bpf/progs/fsession_test.c | 72 +++++++++++++++++++ 2 files changed, 97 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/fsession_test.c b/tools= /testing/selftests/bpf/prog_tests/fsession_test.c index 83f3953a1ff6..2459f9db1c92 100644 --- a/tools/testing/selftests/bpf/prog_tests/fsession_test.c +++ b/tools/testing/selftests/bpf/prog_tests/fsession_test.c @@ -77,6 +77,29 @@ static void test_fsession_reattach(void) fsession_test__destroy(skel); } =20 +static void test_fsession_cookie(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open")) + goto cleanup; + + err =3D bpf_program__set_autoload(skel->progs.test11, true); + if (!ASSERT_OK(err, "bpf_program__set_autoload")) + goto cleanup; + + err =3D fsession_test__load(skel); + if (!ASSERT_OK(err, "fsession_test__load")) + goto cleanup; + + err =3D fsession_test__attach(skel); + ASSERT_EQ(err, -E2BIG, "fsession_cookie"); +cleanup: + fsession_test__destroy(skel); +} + void test_fsession_test(void) { #if !defined(__x86_64__) @@ -87,4 +110,6 @@ void test_fsession_test(void) test_fsession_basic(); if (test__start_subtest("fsession_reattach")) test_fsession_reattach(); + if (test__start_subtest("fsession_cookie")) + test_fsession_cookie(); } diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c index f504984d42f2..85e89f7219a7 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -108,3 +108,75 @@ int BPF_PROG(test6, int a) test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; return 0; } + +__u64 test7_entry_ok =3D 0; +__u64 test7_exit_ok =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test7, int a) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + if (!bpf_session_is_return(ctx)) { + *cookie =3D 0xAAAABBBBCCCCDDDDull; + test7_entry_ok =3D *cookie =3D=3D 0xAAAABBBBCCCCDDDDull; + return 0; + } + + test7_exit_ok =3D *cookie =3D=3D 0xAAAABBBBCCCCDDDDull; + return 0; +} + +__u64 test8_entry_ok =3D 0; +__u64 test8_exit_ok =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test8, int a) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + if (!bpf_session_is_return(ctx)) { + *cookie =3D 0x1111222233334444ull; + test8_entry_ok =3D *cookie =3D=3D 0x1111222233334444ull; + return 0; + } + + test8_exit_ok =3D *cookie =3D=3D 0x1111222233334444ull; + return 0; +} + +__u64 test9_entry_result =3D 0; +__u64 test9_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test9, int a, int ret) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + if (!bpf_session_is_return(ctx)) { + test9_entry_result =3D a =3D=3D 1 && ret =3D=3D 0; + *cookie =3D 0x123456ULL; + return 0; + } + + test9_exit_result =3D a =3D=3D 1 && ret =3D=3D 2 && *cookie =3D=3D 0x1234= 56ULL; + return 0; +} + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test10, int a, int ret) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + *cookie =3D 0; + return 0; +} + +/* This is the 5th cookie, so it should fail */ +SEC("?fsession/bpf_fentry_test1") +int BPF_PROG(test11, int a, int ret) +{ + __u64 *cookie =3D bpf_session_cookie(ctx); + + *cookie =3D 0; + return 0; +} --=20 2.52.0 From nobody Mon Feb 9 19:00:14 2026 Received: from mail-yw1-f196.google.com (mail-yw1-f196.google.com [209.85.128.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 58CEB27586C for ; Wed, 7 Jan 2026 06:46:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768364; cv=none; b=ig6BWZCTlU99wYq4TvOC3nICPNyMFDRW/jyDjXDH+8yIM4nK9L+9fG7hPXmSyOec4J8jQ9HI0u1d1+q84WgvGAx8LnW3oeuzccaxg2uRVXI3vsFQ5tz0S+aAHND/iSCUEtrLjW+qKcRP/szHTz/osltODJUUG5qmOMfvZQBtJfY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767768364; c=relaxed/simple; bh=agW6uKNys5gOeoTrVORTjBOaAxozAsYVc4VUeEIRBqk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qksvv+tEXv8p3TdWIZJUCxAfKH8K45Lxq/Rwx4Z9ySgbSdjcb+U+2EYED4AFR3ZED25lsbGmVZH9z8VpTaaPoEJBWfB6FznLjR5yY0SFI/wdBjRK00OunTvNA6cEG+kECp+/1cNnkGJAI1lKp/ZUkiFlycNeY4aBajCmdvdm6Sg= 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=DwTMbxd9; arc=none smtp.client-ip=209.85.128.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="DwTMbxd9" Received: by mail-yw1-f196.google.com with SMTP id 00721157ae682-78c66bdf675so18464477b3.2 for ; Tue, 06 Jan 2026 22:46:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767768362; x=1768373162; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ft9yy1vLUwNJD7u+x5LfWhJWNGjlertbzF816wc1jaU=; b=DwTMbxd9IeAkkEfBrWzCeXpKfpwnwxgy4qvoLrA7f5okRsKRS6kCKXQWNhIWiYmYtb xi9AcqxJzqdTUJJZpsKrCA/IfJciYGjGdmJ/DJ0oRMlQVLmC97Ie7Qebw8Miq2iw6ZF5 Ol5BpIRNaY4kOdOVMF5xLz4u8k+ymUYRV6nDRkJ8es9+hlZo4QgFntzN1K+oAYC8M6He 9Jlres+ElBWns1U7IEJhSUs38m1gpd5Ym0c6VAN+Swdr0Xo4YVYtXnrekRgfSqmeEIuR KqaVy6ivG7+8oBbYUUa1c1LDt5iro/aiSs07/0Z5I41IB/xeol1ETzyWNBIVLAPd9ZbT HeZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767768362; x=1768373162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ft9yy1vLUwNJD7u+x5LfWhJWNGjlertbzF816wc1jaU=; b=ZoRmtv+wjLjzvaeLGIiTR2lT/I5tsyXRXSY+RmXOPKnemml0S8ikpZuuuVMp3/K51W z12zpaA++I8skO4cFdBTNK0efn5EYCbuaVouhddouDGA8D9LxHXzsi9Lf6DcfR3+qZ/i G07Z6aY15+dDdKXow13uJRF1hzxGfVGc7JVh6MSh2SEc4XqjZSAbBa7b+gYAdI0ZQzBp mgKxoEaxLZq+m5wPYNKiCYv3JRNtTyZyy/ypcPfxXtD9YsvQuF7KWfmd/wmHBAt3l8Af OWr0Hr3ydhDCTCt2RmFsINWNoqTv7jnB4pbnCa5CQQhxxpn6FYkhMXqMRYAulbYIP2Sw +gcA== X-Forwarded-Encrypted: i=1; AJvYcCXQHBDSZDSbYAYkFnRSFine4Zlu1kS0Ci58GgiEWj5QBOpFsUqoK8RiloiLHnyhRi4KYVdQDX2z/YizoMU=@vger.kernel.org X-Gm-Message-State: AOJu0YwxpC3Jn8CrIfaLK7LHVWsESujV0hp1HUk4UdXoaqjqFaJZG2st MvAHd2aqN6yqr02IEoOrqzLKERZ3avw0x8NODMSvcPWuLwyrW4LUxbCz X-Gm-Gg: AY/fxX711tkEWCoXw6sGrYTcMMQR6P+dJAG3orBM/BbWuXzbL7fQLDYTtuAMKmB6PLs 5bEP7amaJuLNuwQRYcKhc5GzIQNMZG3IHDby4O8paeUSEVWH8bm95oRsKTskznWEkYLJwj3eKiz fsRbs3c3Vcwih0Pcaqz+9u84+MaQN35IixfLGqslJU+r0Fz8aXx55oVMCDM87k1qjI3jReA8nM4 odDEDwbJUmb1am5AXkD25NprIHJzgvyO58mwfWBzAu5BpI7/mySpPNWytSyCLGikcp5uYotFc3t K+FIXWkjNXZsLqjVNK8tY6td36+H2IkWf4qhKsT4fRer10I+sOkMpM/Vogw0IDpWeYKn5M8j1ns Xcufmwlsnq0S0iQjVCBSVDmYPvGZELqPit0ZI+BEja39c9F29xZw/4XmZkVbHJ0WynDzDUM1bsy AlSwTw6b8= X-Google-Smtp-Source: AGHT+IFRwIpFYE8JW/BqV+Uh4FKDeGkj90yb3724hL0VZNUbVTJ7ud+xBiwCBD2KX8IWvAZdS1l7iw== X-Received: by 2002:a05:690c:e21:b0:788:763:17bd with SMTP id 00721157ae682-790b57edc61mr16814257b3.60.1767768362444; Tue, 06 Jan 2026 22:46:02 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790b1be88dcsm9635047b3.47.2026.01.06.22.45.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 06 Jan 2026 22:46:02 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v7 11/11] selftests/bpf: test fsession mixed with fentry and fexit Date: Wed, 7 Jan 2026 14:43:52 +0800 Message-ID: <20260107064352.291069-12-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260107064352.291069-1-dongml2@chinatelecom.cn> References: <20260107064352.291069-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Test the fsession when it is used together with fentry, fexit. Signed-off-by: Menglong Dong --- .../testing/selftests/bpf/progs/fsession_test.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c index 85e89f7219a7..c14dc0ed28e9 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -180,3 +180,19 @@ int BPF_PROG(test11, int a, int ret) *cookie =3D 0; return 0; } + +__u64 test12_result =3D 0; +SEC("fexit/bpf_fentry_test1") +int BPF_PROG(test12, int a, int ret) +{ + test12_result =3D a =3D=3D 1 && ret =3D=3D 2; + return 0; +} + +__u64 test13_result =3D 0; +SEC("fentry/bpf_fentry_test1") +int BPF_PROG(test13, int a) +{ + test13_result =3D a =3D=3D 1; + return 0; +} --=20 2.52.0