From nobody Sun Feb 8 05:37:05 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 53D6B26F28A for ; Thu, 8 Jan 2026 02:25:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839120; cv=none; b=Cpq1p+A82uGAweVcq3NRtjAehXKT6Rz+ZygjjcPAWqTrZgNcK6NiHWTiiL5D1YQUOqg4A724MblPfFPCGPauxjjdOrjkEBf2OMNHXpFHf01VP7nvbQP2VAhh82aQwaCbCznuBL4jFwZe7GFS4Kq7RbxUjz88XqnINcj1A3qEY5A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839120; c=relaxed/simple; bh=VH19+bgFV1Ar6zkGFMkPmgaENggN19J/WBKWnJQlIEA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pgEc+1yNA56QNeDcrTT61TECoETttEv8s6sJZC62mwHU2u3C3Xp1qrOSdWWSkX8E2p4ytLWp3QG9DWV1MSPG/hP27lHdty9LeOon3iBcWYpFe37q7Txncs5NKhnshx8IhMrQy3JVbApQiccI5F3hfRQkb648otKKbGgkIvjNNBI= 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=RubomMqy; 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="RubomMqy" Received: by mail-yw1-f196.google.com with SMTP id 00721157ae682-790b7b3e581so21337357b3.0 for ; Wed, 07 Jan 2026 18:25:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839117; x=1768443917; 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=FoUpDl8ePvedaTbwb3CC+oM/qrK1PAmOwF480RyM+do=; b=RubomMqy+Pc+oB70Nlf8KvAWMdqZmHa/+jWUdwdEGLMt1dwc0D87+iOZTMHwG7SFiW xh8XaT3NvwsdVpR9Fs/iucHSoqrRBeHcsvcRTZruTuvDHNB905pkLmNKluOpNoNNiAAY qqyt2HyYTcUl77LD3yR70SwmaNyud7ikc810JSCFkkZR5mtYq3OxirI4WkP4ZdRlojNl 0xieYWkowEXcpDqVds7c+ZUIYt3okfrTzEmswKJ9BggUpsnGZDZWE/r6qDRTn+Tj54nM iw1Kp44/7R4MQz+uZLwvid081w4XgtBUVE7YFRTOW74n8uaqH0a+f1PlsRUn6w7rct4k pYaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839117; x=1768443917; 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=FoUpDl8ePvedaTbwb3CC+oM/qrK1PAmOwF480RyM+do=; b=f/1MReywXqnz/2mGrsvtNNXDWkThvk5uI2GEjsciPEQ4aGcjZpF+4Todu4KmIInoAA u9+yrR+1XM29fan2SHz38QumEvibCgvaD3Sdo2okaLVQ1jn8QlJgP2uTRsBRbDCpb4l9 b34vvA+BYsWI3V9ZQUjwcblA7eFhSATdgDU6aiWpA2IGp75ulJSNiLjxk41Dd49PoUti Bh+DIg+urfxniNWK38kEz+fgsY20OhBKyGBmRNohcV1H/YmN9NCviTvnuU/C2R5LMJYV R34UcmBBjAktxjVLBMZsEZqrpC36qxAytdX28J7NiKwsrGVmh1+EDRFW6mk9zo3lt8Zd 50Iw== X-Forwarded-Encrypted: i=1; AJvYcCW4flUfSSkfOsrBx7QTe6mvHDQvhVLo3DN0fTWEuvrRm7SCYh5UAIR0qdh4ekkl0O5LDyaGvAUqfiL3dzg=@vger.kernel.org X-Gm-Message-State: AOJu0Yz3XwNvFSInA1HjuJXBtMiKnV3vpuLMhQwGNipnXgZqPdOZOcSk L3B9jVoxtQ2HRBEqb2pq0038BnQdJ9X5CVszBk/ArxP0HFrvzs+uN29x X-Gm-Gg: AY/fxX6NdhT2YufsHn0oYqA8bzK87jzuBzcr7rnTFhuJj7rm7bNvOc5aYvWIyXo6Kc/ Hajo6VkAyCs8rwAezewg/lHcwnm94fF6lmn08nmHRNHPDmH4hEoXqrfUcp8nybxPo2derGxOLK+ wDFofGYh4OZyVdDPA77j/PbOIbcJETa3po/kQAV+kipswpCzeBQisvDEPpMZnW1XnMgxrEP95zc n/R4wOYy70ZSaPPaAfAZLYd6v1+0YP6Va0XPFE6+J9or6t1h2GCU1J6meAOGnAERqRGOPcvei1s UAKpfWquUuhjWgOUddgW5ZoucVuxpsywYb6f04yMSklaVzL0OVgLiZywhcXgZ2TQomZjFJuMPcG B2AwXmk7TLG+Texux3cW7Uy2tTuA2xkd1r4NCySAeUaAwgVxFCm0n+dax79IYwZcjtYwdWnHpKX KL1Ajhx3A= X-Google-Smtp-Source: AGHT+IHNn3z0rztu7s7lhSKQVVgaT2IbOnNBSvR2I5UE//tEV7oKfW5QbqHb7UoHopceCEaA8SmM7g== X-Received: by 2002:a05:690c:1e:b0:78f:f30f:e74b with SMTP id 00721157ae682-790a96e817emr67416367b3.25.1767839117193; Wed, 07 Jan 2026 18:25:17 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.25.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:25:16 -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 v8 01/11] bpf: add fsession support Date: Thu, 8 Jan 2026 10:24:40 +0800 Message-ID: <20260108022450.88086-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-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 5936f8e2996f..41228b0add52 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1309,6 +1309,7 @@ enum bpf_tramp_prog_type { BPF_TRAMP_MODIFY_RETURN, BPF_TRAMP_MAX, BPF_TRAMP_REPLACE, /* more than MAX */ + BPF_TRAMP_FSESSION, }; =20 struct bpf_tramp_image { @@ -1875,6 +1876,11 @@ struct bpf_tracing_link { struct bpf_prog *tgt_prog; }; =20 +struct bpf_fsession_link { + struct bpf_tracing_link link; + struct bpf_tramp_link fexit; +}; + struct bpf_raw_tp_link { struct bpf_link link; struct bpf_raw_event_map *btp; @@ -2169,6 +2175,19 @@ static inline void bpf_struct_ops_desc_release(struc= t bpf_struct_ops_desc *st_op =20 #endif =20 +static inline int bpf_fsession_cnt(struct bpf_tramp_links *links) +{ + struct bpf_tramp_links fentries =3D links[BPF_TRAMP_FENTRY]; + int cnt =3D 0; + + for (int i =3D 0; i < links[BPF_TRAMP_FENTRY].nr_links; i++) { + if (fentries.links[i]->link.prog->expected_attach_type =3D=3D BPF_TRACE_= FSESSION) + cnt++; + } + + return cnt; +} + int bpf_prog_ctx_arg_info_init(struct bpf_prog *prog, const struct bpf_ctx_arg_aux *info, u32 cnt); =20 diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 2a2ade4be60f..44e7dbc278e3 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 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 ecc0929ce462..c65e7a70cb78 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -3577,6 +3577,7 @@ static int bpf_tracing_prog_attach(struct bpf_prog *p= rog, case BPF_PROG_TYPE_TRACING: if (prog->expected_attach_type !=3D BPF_TRACE_FENTRY && prog->expected_attach_type !=3D BPF_TRACE_FEXIT && + prog->expected_attach_type !=3D BPF_TRACE_FSESSION && prog->expected_attach_type !=3D BPF_MODIFY_RETURN) { err =3D -EINVAL; goto out_put_prog; @@ -3626,7 +3627,21 @@ static int bpf_tracing_prog_attach(struct bpf_prog *= prog, key =3D bpf_trampoline_compute_key(tgt_prog, NULL, btf_id); } =20 - link =3D kzalloc(sizeof(*link), GFP_USER); + if (prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + struct bpf_fsession_link *fslink; + + fslink =3D kzalloc(sizeof(*fslink), GFP_USER); + if (fslink) { + bpf_link_init(&fslink->fexit.link, BPF_LINK_TYPE_TRACING, + &bpf_tracing_link_lops, prog, attach_type); + fslink->fexit.cookie =3D bpf_cookie; + link =3D &fslink->link; + } else { + link =3D NULL; + } + } else { + link =3D kzalloc(sizeof(*link), GFP_USER); + } if (!link) { err =3D -ENOMEM; goto out_put_prog; @@ -4350,6 +4365,7 @@ attach_type_to_prog_type(enum bpf_attach_type attach_= type) case BPF_TRACE_RAW_TP: case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: case BPF_MODIFY_RETURN: return BPF_PROG_TYPE_TRACING; case BPF_LSM_MAC: diff --git a/kernel/bpf/trampoline.c b/kernel/bpf/trampoline.c index 2a125d063e62..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 b816bc53d2e1..3ca7d76e05f0 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/tools/testing/selftests/bpf/prog_tests/tracing_failure.c b/too= ls/testing/selftests/bpf/prog_tests/tracing_failure.c index 10e231965589..f9f9e1cb87bf 100644 --- a/tools/testing/selftests/bpf/prog_tests/tracing_failure.c +++ b/tools/testing/selftests/bpf/prog_tests/tracing_failure.c @@ -73,7 +73,7 @@ static void test_tracing_deny(void) static void test_fexit_noreturns(void) { test_tracing_fail_prog("fexit_noreturns", - "Attaching fexit/fmod_ret to __noreturn function 'do_exit' is re= jected."); + "Attaching fexit/fsession/fmod_ret to __noreturn function 'do_ex= it' is rejected."); } =20 void test_tracing_failure(void) --=20 2.52.0 From nobody Sun Feb 8 05:37:05 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 87D5F26F471 for ; Thu, 8 Jan 2026 02:25:28 +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=1767839130; cv=none; b=QHh8z1cdYjNIZJY5VbaCpq6MptZIP+X/DVzWmoQn9uwONNv3DGPFhAP6JLpDnbVsqYuU5vmHupVpn17+WgOBsqqRWS9mpp+VQ5dxR8r0k5W/GRRYLGdNf6wEK+TlJCOMQyuQOpRjb+UznTzMHBX6YZfkz2UbOYLBCSCS+JSwC8Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839130; c=relaxed/simple; bh=VhBBi66SFeKXbV7OJrrw4WoyPdDGNe3BKHOh9sdreXY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KHzE/Cbsjvghsf8xiStEE3gZjGnBNPiJfcDgHtteyGAtfGTSOkoE3ERVHd6NF1FDznyP/+6BC+bCfzWryaxzDvhoGjMc+X7y4MXUc1fUH/3QnIobqEEB0QdcDydrT813pL5mFIt7TkVKPITsB+aFZzYndaNp35x6s2OBDzznNwo= 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=EnXpZC+t; 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="EnXpZC+t" Received: by mail-yw1-f194.google.com with SMTP id 00721157ae682-78fc520433aso30480617b3.1 for ; Wed, 07 Jan 2026 18:25:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839127; x=1768443927; 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=rjkgpIcKhjQZAa0EelYk21O9foZl8TfKrOJc4gFivFo=; b=EnXpZC+tZWVJVIn6TyUS+mZD4Xyrsdah7+b/PL/ss/eaCKfyEu6HOnhT+K5mM5vf9C gdFjmSs5/y6GJiPwqp1RK1gSN8oYsYaH0RIHcQDZNexcR9bz93F3UXuGUWhqNnVPTZZN GAQapJeE8z7QmX3YHyvvxhzL+YeupiocPTav3KKvMmtpOznLdi2GFjq2kXEFATl6/eaE SjZ6xhY8D3+Q9YzX/DLmnJy272MX8cWoxqpIiQnXHdPLZnPVEg81ygk3Cn4VuDp6VUR8 0KJQOtEX969+POO9qIXckycUMFHk3JHy0OyyLc/P61Wum073pH0wv6DtsumYOCchEnUi KuMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839127; x=1768443927; 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=rjkgpIcKhjQZAa0EelYk21O9foZl8TfKrOJc4gFivFo=; b=X27NndOOKvjvznK9gvoVUIyX+FoVrDI93h51T5bAK4iCul2h23noidn2gntRwVqMq6 Ds2MwxstMtQP30aZqkbPcHKzKo/mmNCb1vwJOYhDiU0gJjjjKINJtKHXto5HIOw+bLp1 VvhgAVD2UPTwJdzyNnGjx2myHx1Lsknt44COLfZr6d7HuJBLSTeT8BLsJ9fHki4yLktY 3TvVe4OHNsFtplkijcf1hseoyFH1NuJNpJHrBPhQ7YMHRskmuyQ5Z5M9O7zF/wsNdxEU q0bq6k3CnvZ+CeuGhUxejWYiKsyFf8gRyjY4k//6cL8BJM1+b+kGCwiXqvPm0ys/PbDa L14w== X-Forwarded-Encrypted: i=1; AJvYcCU5m2j1S85+XV0YEKfhOCx+y9YNUbLJqYRQzYe2Jqm1VmC/cSk1eqNxqOnFf4y0LvzP94D00uwqlg8TC+0=@vger.kernel.org X-Gm-Message-State: AOJu0YxPaca0LgrbSpCYeizbTgMsM3gAeyyKGqieRrQA/Q/VKhCnyKip EajxnRlSq/ZE0uDUHQkxk3mFFzWdNFJN6Ik+cRr+XFJ56VqVUb7lw1ZB X-Gm-Gg: AY/fxX5CV/zGpuiWh+hoJFCHFXdMa3rV3euk4myUmu7KxjLfwFgSF6OYZ8HZLHfDkbC y6vjMZZm6tJlJL2RwBB3NUHLru+EA+JKmt4wcBCr8rewajsBygFH1JMXCGFd80euzCsKsLG3cRd k6gQJcoplHs7IdJPW3u393meWdLy92Tf9TPCE7pagYkaNKiH7a9tfUE7ZtaZkGTWkdSbkn0thqY qf2N8G+5Q4MZEN6jJHlkImq9NKctBQ8v0rf5z6CujxlE9xQkbKhZjpU0s/prkRTMh9EhRY8VG2k hZ+FtK8C9AFIVXPMIe4XDukg9dBUznCTDbiiHU6RHhFB/LeYebNYPTHNWVsRIB1Si8o6gBUv6MM 9PJKRB6v96F+5D4o7LzNZJeh//6CoX4HhNB6h0+/EN9zJ7jMQxT812ZkXuE4FFYebcVtH2IyIYa oKcQvK58Y= X-Google-Smtp-Source: AGHT+IF6oe+CNyD8YMJskeioT2pg3/Psy/o0qTkXNquKhbC5SDD6nywKNBGuaI6KxZg9JJ5rrEbQ8Q== X-Received: by 2002:a05:690c:64c4:b0:78d:6f35:bdb9 with SMTP id 00721157ae682-790b58250d6mr40899167b3.51.1767839127164; Wed, 07 Jan 2026 18:25:27 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.25.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:25:26 -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 v8 02/11] bpf: use last 8-bits for the nr_args in trampoline Date: Thu, 8 Jan 2026 10:24:41 +0800 Message-ID: <20260108022450.88086-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-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 --- v8: - fix the missed get_func_arg_cnt --- kernel/bpf/verifier.c | 35 +++++++++++++++++++---------------- kernel/trace/bpf_trace.c | 6 +++--- 2 files changed, 22 insertions(+), 19 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..5f621f0403f8 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -1194,7 +1194,7 @@ const struct bpf_func_proto bpf_get_branch_snapshot_p= roto =3D { BPF_CALL_3(get_func_arg, void *, ctx, u32, n, u64 *, value) { /* This helper call is inlined by verifier. */ - u64 nr_args =3D ((u64 *)ctx)[-1]; + u64 nr_args =3D ((u64 *)ctx)[-1] & 0xFF; =20 if ((u64) n >=3D nr_args) return -EINVAL; @@ -1214,7 +1214,7 @@ static const struct bpf_func_proto bpf_get_func_arg_p= roto =3D { BPF_CALL_2(get_func_ret, void *, ctx, u64 *, value) { /* This helper call is inlined by verifier. */ - u64 nr_args =3D ((u64 *)ctx)[-1]; + u64 nr_args =3D ((u64 *)ctx)[-1] & 0xFF; =20 *value =3D ((u64 *)ctx)[nr_args]; return 0; @@ -1231,7 +1231,7 @@ static const struct bpf_func_proto bpf_get_func_ret_p= roto =3D { BPF_CALL_1(get_func_arg_cnt, void *, ctx) { /* This helper call is inlined by verifier. */ - return ((u64 *)ctx)[-1]; + return ((u64 *)ctx)[-1] & 0xFF; } =20 static const struct bpf_func_proto bpf_get_func_arg_cnt_proto =3D { --=20 2.52.0 From nobody Sun Feb 8 05:37:05 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 467AF1DFFD for ; Thu, 8 Jan 2026 02:25:38 +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=1767839139; cv=none; b=mVHs2rcocEkAFAaO4SHOIeuqre+kDaMBy5j08GdSs+YbW5vOJdKAQ4BaAADaiYvHSJOFhLcjNzNBXSQqJa4gvd//tqikbUDBXHBMx6DY8115Phce8cyl5W8oa0ExxPhwG72Po8+XZYueD8sqtjdR7JWCF+c0YMBB47r6bg7VUXI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839139; c=relaxed/simple; bh=z1FXtwKIRsZptJAyDyFFIRDl2UKWJMd6LDExUnxO6es=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sPaafOBumsDoBgGTydjqtNlq1hDptI4w3j+C2tKMA3rQrEK7VLsf6xQNc91HTMEYSIy4PQ/oLUeTL8Zzml96cGZ9v3LykNyOEecZU92Ipyk7jAdFLW2iTINak5f4gAoGuPPl0Ur1DSkuGEDZmF7Ju6+4bBjO9v06cQn/U6vS/s4= 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=BBl9hz2R; 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="BBl9hz2R" Received: by mail-yw1-f196.google.com with SMTP id 00721157ae682-78fb6c7874cso31684137b3.0 for ; Wed, 07 Jan 2026 18:25:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839137; x=1768443937; 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=dfGdp4s1hudLP6FKv2EKIaTufWaeCLX1APZrG5rR5Yg=; b=BBl9hz2R3dHe/KwrBzwBptXyvRr7B7d6UlZPXiG1aY8zi3zIRx6W4XbdyydO1yM7IE VK9c7RILUHxUwl/PeRCpajdngDjXhQODU0CnbMu6IfLfoJJ4NUseE1AOmxG/bLNo7fPE RrlMFssmfwXpPI137cWfvqkPI1gmukSCe6oWmI0ZLsaCxZ+bPqW9D7z6ekgO8tX25FNH 1PylSM6vvYqsLNl22QBUBiRVTFIZXnc5/oJDGTsjjW3tWcaG0RYngUYgdEB5qS4fHI8m jPyQJqAwSEX1NRcsslZSWJNgJhxYHGQr1fOYSYS4nTPSAODMQ7kCoRdQE+Et8PA6FWq9 +XOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839137; x=1768443937; 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=dfGdp4s1hudLP6FKv2EKIaTufWaeCLX1APZrG5rR5Yg=; b=GtnBZRi0MpBNhhyGmG2c1iK+RY41aF22FR+7z5UICByxVOOAvcaqnPH8Rr29BEYAci eIHtD1GFmXoNjfWuPz3LHJW5LvF5gUKWnPhN2D2PIssvIgW4AQfxGXDG4DHLTq6XNBol x3q+HYwBO0TbpE8PKnYPq3ldtPFrxdYyS2ldr1Rb2oRGu7WvinsU9F9BUDzkNYD61nlU pbtDVyYeG393B9bRVTRv3jXgS1Ir37Lz3Iu76g/mOKaNyENS1+YTm65qsk0xoAxjwyM1 CjWBAkgrL8m4f5MAIfP+XbGVHfLWUVN5CMGEXhczMyBEC9n5Czf+NphOqS3nQ2l51wZW cj+w== X-Forwarded-Encrypted: i=1; AJvYcCX4+EdU+Ax4SD6KVJPZfxhHDrhRjVdjcviRN9iDCdAxJvQIWnLJfKMtaDTJ+E33A6ZFESD56l0352xIzJU=@vger.kernel.org X-Gm-Message-State: AOJu0Yzfce0Xt2MQqlQWF6ItBaW4UFS6JlXbQPRy4zjQFFpEHlMop/V6 /Uw9yIfokK6tPTR8e1UNGh1vPYUWZfs0bumCx4ERnUd/Lex8aehvkJdc X-Gm-Gg: AY/fxX5GR4GvMbUty/ucr62f+wAV8xnYB/Ff97fieHzs6bVW39uUAOZKz5Ar7pZaWna X0ZTFmEr6RyAHWi6kwbHAPR00jcdiRRkrvXTJJ+J+HKu5lqLcxldOUzJsOeQGDBBXXu0dX/7uao kIihwbb/QO2PKDHC6LqnWJD2AmUMXnBkfbjRCU8brFEZ8Jtk2NBLgZHLXmyueVhOuKBaLvK/tBJ ABIEFIQmCHnL+b9sElsx7DrUBz5aK0cUP2av2QYs+IFvWH6TRazI+a56utHBtl3qlgPyB698rgP cW/TIPAUAyXl7nAfu0uGcibiNuUle9MRFDfvbcXruIF+LACyR5er3B36jNVU1WJfVAbYnGUeY9a cLqIElWx6VnXZamg1qoXD+l+0/BGz/TpUn9mFb3cREY9fhoqaEtYotfFEc4kPKVO+88icD0DtmG vWHelRwlc= X-Google-Smtp-Source: AGHT+IHqYMLoVCf2X8X0QJMoLJQnWHLCXx3Yuc6YM1wrrAj6dJa9o4RR5eXnLSarByUc9ac/HaBOTw== X-Received: by 2002:a05:690c:6012:b0:78d:1136:4e6f with SMTP id 00721157ae682-790b55d3489mr50675527b3.15.1767839137335; Wed, 07 Jan 2026 18:25:37 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.25.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:25:37 -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 v8 03/11] bpf: change prototype of bpf_session_{cookie,is_return} Date: Thu, 8 Jan 2026 10:24:42 +0800 Message-ID: <20260108022450.88086-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-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 5f621f0403f8..297dcafb2c55 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 Sun Feb 8 05:37:05 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 6005CF9C0 for ; Thu, 8 Jan 2026 02:25:49 +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=1767839152; cv=none; b=k7cSom9hmUaV+QL6/6xpw5LPlJwkNL5QrTpHj1Veodzjpmtw6qCY0MA9rzt6iTWaoURFa1UKlbJShgRjlHLt6Mz9UbbvnahNtuL7hrtAB32phRtQDRckxntooDq5CsQwanWjXYey1ICTjSIe047hBizWXNw19Swq+I+Lw1p4EoI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839152; c=relaxed/simple; bh=33ZXMJWuCdojUF0ws2zQppZFn+bzB7mAX+06WHAujaY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Am9xQDkbZOsCNkstLBi1O8OzM3u3UZDOZTjji8Vq6yBj2YLS81ZdvjRNeda7e2RLE6rk5LfLfcfhRxvzvkIT6bPtYDSmKs190uNuvMwdAkQCK71kr5AeUBGbyNH+2/kwO4iIuMXkg592fRXJfCMKm3HZUlCSjrrlh6Re02mvnnc= 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=W6klOGME; 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="W6klOGME" Received: by mail-yw1-f195.google.com with SMTP id 00721157ae682-78fc7893c93so28600597b3.2 for ; Wed, 07 Jan 2026 18:25:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839148; x=1768443948; 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=vInP6QyodjCROjJEkJgbYkQF4JZFktsL3Kjqjh+D3Lw=; b=W6klOGMEG+C/PvDfFt72phtgKdDwPgV65g4iKCaduLYOAoJBnDlblGbyR9YXSonJuT EIAowoEtSNeOSqfRSXuY5LBCKo9LWkBuapI/51NmmIDFKDjGTYftcuWo5r57adFO4XUm bOpSd2ZGh4PLQkf62Ex+x0ofGX36uqbIVNKy6FWB4Eu8tAyYzSS7x7HGZDce8sV6HV9B Lke5LzT+wqG0ap7r6M84673d588WaV8l6F7Pf0V2LYcAFoLzSxqE1jxwT7GwRobF5Dui 24P5QnknGvlPodZq5ALNHGEiJOFREgit38bjzUSOCNaOZTKHLnHBq/k3N29widOQtlFl ttGg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839148; x=1768443948; 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=vInP6QyodjCROjJEkJgbYkQF4JZFktsL3Kjqjh+D3Lw=; b=w52dw2kKvA4hALgdxS8O2Jwh1OXH8T6nKH5cVDxA5MvxqBDJrFGw/f7khJm475mozx 9YCxs3iWHLHLjd1UBwGvSRa8FCV8qXmmadQ3ilfhgNb7Gr6SAzRGQd5Qv0AdNC23BSbI s6xbCibQuo1BhoCj+8jrkHLTRCBeV42n2jo0Leurln838UrVQSp4Zys8GY+hf62cTcv/ RSsvh76S3fma6jvGW7XTXCh519S25kXd6ytaJ2zaoBpkExf8koBRxXdt2KFUOoeZ3Bt4 hOnHS+jVvqhTbNgx7sQm0FROcJKQ/TiCEpVYOD2qu9u+rpWYIlUAOZUlVQ+D/H5v3AeN gAPA== X-Forwarded-Encrypted: i=1; AJvYcCUl3uLzFs8v13/j74WaDB17Phb20mBf3UgsLoyYs2nOwI32beKbOHUgFvThQBNWNApnuTeb0FJIaBTRGrM=@vger.kernel.org X-Gm-Message-State: AOJu0YzA12j5ASeh5rsYPOtw5zZlTEUJ41pZEfFR4TUL84ziucdYqv+6 FEMoK9wnihVhnv5jHLAI/gVLrgB5khbUnnGJPYyutQ9N5+Y/aZXHpCay X-Gm-Gg: AY/fxX4t41pTbpdRt4uQH8iyXU0QTJH/57wH+KD078E9Esqdc6MlbK/XNVhUfFK5LfY n54zpdBLfsLsStggziMfkmoU12lHc/cX0QCFzuk/BFXAzv4/ItF94xBNafsYGO1N8kT+fqKvliO baWsQWhPy2AEJ7q1OtTHra5T9X6JFsDFFG8+JGMcI8uikvdSVRwJbOCYvAiGt5Y9UIIIfGjChkm DTim3gxNiXy2pH5FgbyhJDQXuT1APVNZTmfe81C+gAo8MwnavCoVu+3I37BimFS9YwkjJ5QQXry usXa5EnEvu0WbsR/3pekcXAM60sXgdTAHVpHFRzlhEi1Ambite+cbw4RbMVzjZf/xuEn+I8ks+O nYPcJ7ug8JqMEh89YIDrvluXnHLj29nBIryRiqnwjCWB2RhSOh9i0YgaOJ+QvVZjuz7fLMXoAEA k1lF4nsn0= X-Google-Smtp-Source: AGHT+IHFgjTB5e0Gs+yTOGkTyHd71ZhpHmUP1hLLO3sarTu+JAfQiodWZuFVGmYj6NKPXu4GfA9HHA== X-Received: by 2002:a05:690c:600a:b0:78c:2916:3ef5 with SMTP id 00721157ae682-790b55c08a5mr42635457b3.8.1767839148092; Wed, 07 Jan 2026 18:25:48 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.25.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:25:47 -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 v8 04/11] bpf: support fsession for bpf_session_is_return Date: Thu, 8 Jan 2026 10:24:43 +0800 Message-ID: <20260108022450.88086-5-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-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 41228b0add52..95248b0d28ab 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; @@ -3974,4 +3977,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 297dcafb2c55..056f30844de2 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 Sun Feb 8 05:37:05 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 6E07E271476 for ; Thu, 8 Jan 2026 02:25:58 +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=1767839160; cv=none; b=rpCGeXvbvia8AG+6YxECMBM7OJ5/F88lXZuKpS0ZpcIE5TvLXc1kM4Mny8iNVxLVb9pRDggBRX4x6a5Kwl5sSFHQeeerehsYRaT0R2Oezx6lRNO4Y2yZI+zzg61Ni/AFSpAhIB9mnJtBn82VflXlFdhof7xkiCG1O6ud6dtxmkU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839160; c=relaxed/simple; bh=LjFav+AyfQwuJtu4HS3krhAm4CaZVulpYAJZCeHKUb4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=coMisH4Bx+ycSCevSomxCXYP69vbfs+x0TFW/BarH65RxguAnkqE8ksB2c/1ZTYcygKo6LT6K6LBztvu6eopdlSS4se3JBN4rLMRaKNtaqo8NTv/xHYYbS0B7ydHOKLHRJtGyGsC6yeQ4fUacvNxyOCnGG4Hof0PhEUwVV+KpY4= 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=nWQ/R0Ao; 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="nWQ/R0Ao" Received: by mail-yw1-f195.google.com with SMTP id 00721157ae682-78fb9a67b06so29223877b3.1 for ; Wed, 07 Jan 2026 18:25:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839157; x=1768443957; 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=wk7bj0ctcXIlEAHnRAyKA/DsnStulYh/7klRUEuuWF0=; b=nWQ/R0AoBK9z9jXKqJRih0PXVPHQtJ95lPE1pANUupCY3lRCvweVAaF8GKnw79hXXT L9tKw/cEkx6L0Ui9OSF/wbzyeQsSNz0RRrXhXzF/QY5/80uZrdYvY3CbH1QTPJ9/rBDl h6me+9nsGMRrvgBe+LhOerzOS0m+MnzUwmMSoJr3sYx7L7vI2iski/YE4+VTinM6Pgcm WLDLvMikrNMes6Qc7VntwcfB8BnrIk8DUlpS8FiHLFwoivh7znmFMKNC20lGzz4pe58I am+tfyOnuNrcWdmxzHekeaQMdqKf2+jPZjMOy27DmIFzZpnktMiB7VddIrgDE9QQuKQ6 2FfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839157; x=1768443957; 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=wk7bj0ctcXIlEAHnRAyKA/DsnStulYh/7klRUEuuWF0=; b=EhGMFsk2m+7pJiZrUAm40KE3sroUgKcau+/KrpkaM2NPOJbX0d+mtn7PdU16DpX3fu cKIJlneza+lsr+PQsJ5+UMl9PnE1wnLMsP3HozNh7KZvRILklldfHy0CQwGUtAaWL3bD Ek6U8v/lIeBzO26FMEFICZfKXdeO9tg8ThQc2FW63Jqt3WceEZ+Jk3pbrFgJh9buTz+s jWSw0OC/I6YI9qXFVsM5Wr3oMzcHQIz0rs3enujFrnSUg0PNPXiXsTekAG5tGLc2vHNJ BnSLiRY5Cahl/2C7SqCsHLcHPRkl89W4AxLYyjV36zAgl9z6GIOXzl5M2WIXWw8SjOqh Gn/A== X-Forwarded-Encrypted: i=1; AJvYcCUh1LpkfsqU9sEPcBA8qpZHiiwLBSfF5OfIkdLCmH9gDtXymdoHmzEZ+VXSlYVHokHJ1ExFau3FPUESlPs=@vger.kernel.org X-Gm-Message-State: AOJu0Yya8zx2WyUky2tgzJH7LxdG60KFbcRGqBujWVroxaImnksezcC1 S8f9pHM0VKIwDs7V1cLkCTJ2Y3yEpQKCeA5A7VNDUlYlm58XF0CiR6Xa X-Gm-Gg: AY/fxX4w9FG0sW9DsAqpUbRtCwXXBNNzxwAYPm6LoEdSoEp6wSvsVnaq+tEb+GgkcI1 Qpfdifp2iRP2qm3DZAHOFKvDICgO6lPNrFEyrIyohFm8BkMLsODjHgT4lx96+PshsMIUQz2dVgY Wo5Zk5w2/1Hn5PGye3QtS3RjpEd4YCU3NjIxT1jmGnCoyYVbE4NEcn5AjGReLXTfD0aJUwWxpUv l+pgnOKJyztbWeMU3LqTo/MVxyCj7vaT4PlOSSwUMq+N2JW8io6o1zxSD4caWIOZflwXXsJSQFL VM+UGt6ajN235kSOHuQqxA2pRTdBjwc11PJV7NebCUWe221pxfvxIrB+BnIuuHG3R1dkF3a+xWS qirzymUjgBQ6FvbUcRkw6XG1LkFJXvn2NDFgbVs6D41QWwFfbnS5k8h4K5vzTiVp/gRE3PdXB7Q sJhHv8YKY= X-Google-Smtp-Source: AGHT+IEfrCShXnIKPT7paSEPLV3+G4mS4kDBvBZJtVyyPsqm/wN+sAbofDDMUu1IxiHGN/iuNlgaZA== X-Received: by 2002:a05:690c:3581:b0:78f:c27c:92c9 with SMTP id 00721157ae682-790b56a62c9mr48402297b3.39.1767839157460; Wed, 07 Jan 2026 18:25:57 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.25.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:25:57 -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 v8 05/11] bpf: support fsession for bpf_session_cookie Date: Thu, 8 Jan 2026 10:24:44 +0800 Message-ID: <20260108022450.88086-6-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-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 95248b0d28ab..699ad06e2465 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 @@ -3978,5 +3993,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 056f30844de2..665f10197fd7 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 Sun Feb 8 05:37:05 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 01FCC27F4CA for ; Thu, 8 Jan 2026 02:26:06 +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=1767839168; cv=none; b=qe03PG6Gmt0sNfMvWp3tjaYlRD2nw2gd8tNPk7/D4e3kfdKRYFxrH6tf+kZbfJoGGmlFoaU8NgaiG5aZPbinlsX48wSbsE/AyUG0mWW0himKE0cNbgV1MM1uedltXxb24pqq91CYTyVGVVvClogvAzdvwaM2jmwdIQojDY/lXog= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839168; c=relaxed/simple; bh=Vk+W6eyr2IUQD5U+QNmcmmn6L3jEBra1Cbetb1uK2cc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oAX+7yFfYiru5e6lnUyjWQh5KJgdcEJKC6ep0Ph7TOAr/OrqtDnjN1dNVdZ6uv+oOGQoEuhg2zq0Aaxs7PHOYUDtenpOn1fB5LJIItbhocNjrgNAI7y6/g1N0sQJ0zzEcZKBGB9CR6A6NTu8RLYl1uWZQcgABISzGJfxYhFBsAE= 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=OhaC/dY1; 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="OhaC/dY1" Received: by mail-yw1-f194.google.com with SMTP id 00721157ae682-790abc54b24so25769587b3.3 for ; Wed, 07 Jan 2026 18:26:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839166; x=1768443966; 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=OhaC/dY1ecZoUT3nWAaF14ZYYqd5OMqC4cR4R+s2et4PChFH3oCZF+7cYn0u0tZf7H /Do7qhcd5HxUnQyiy5lN/ALWZVmKP0Q6x3V7VsAlgF82zqNnLwWqqP9CXCa8FFssUjE6 IRn1CUSyQk4GBCGjTcMrR6lcM6odWDsJJZ054chWiBSEM2RpYeoi79KHV480gHqDMrTC pTN5jMhdvw5y6+9wUH6R5TAuB71j9u/NeZgzXHzLQ/OpY7Jk6WHLrBvkdNurco46THJX T/0s3WxH8nz5sCcpmcjEgtkMRDUo71dl1KQ/gq6xTunyROJfH/XovPTtJTUtDWYHNdVY TRBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839166; x=1768443966; 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=AsZxWlzk4IVGGKGDjsZc3OiJ74/QKqG6A8J2dQ8/Q0hL7GE5ZAex0Z7bYstjIdNdFC vXVAYe4E/ktJvaHNQJJ4ZFHFpvr5uodZSEtnMEyjYkj8XEX093wDFX4iIsci4LJYTHPt ooRX+zwb0C3xv7GD+BuInUnwajB2WzIss5BcPdyLsPfK+mGTzx6WzCLWqa1Upp+FM4eI NCSOTDBBUok9/R0RHO72f6GGlM4bWLm7tpS8EmHtg2xgk8koJr+Fnn4bPEbeUmzOztBP eoP8XJlysZGbCAqBL60aclt1mCrUcy+ODG4OgIqLnoY69Bmh7CVuY6c8LQyMoIEbr+fH e5DA== X-Forwarded-Encrypted: i=1; AJvYcCVe0B1Hcn8LdXI0q0LPvlHbZTARJcBDBACzKp9Qz2m0qBb+slBjPdmKseLBK+Wb0sv1Mqrc/Alcggj2OaM=@vger.kernel.org X-Gm-Message-State: AOJu0YzWiInrDPbungE6fUq/wcrbOr6I64PTUv2zFM0sl3CMQvRPEDSt S3Q4fL26VytzTaNKAlrwt8tS0WURr/lIFmSb7/Jgm4w1k5VEQECNll83 X-Gm-Gg: AY/fxX5XxM8LqFpHrbJeXyRqyTVZRwjIDnYAwFhVKjP09rW8NVN5EBEAQ4DkdwtMYlQ 1jd/NFqIADlz30jwl/SJSFforpelwG1uitm81ykuX9zFOwW7YvxRZgPVvVkfXYMFKpoOhBiAQJt PXDOIq/JkeDjP0ROzCglaZQlq/oT7ugEjjPE+baLkJEFTDg5rEoU2SgSxttk0R06l5hbmCXE5HQ JF2GwGvOLSV+eVzy7r23wd4eQRTsMby4CYud1HOUj4Lf3N60SXWGVNyC8AsIjqwKSqQ355U/wRj ntfG49l2ISDe56goxPzyvC/09MS7zXeFHSm+JzmIMRWjl4nAuKiPkMeyBCWFOJvqlidKxfiWoIh 3PXjuzVNV+rGK7tQUaKBFpDeDWw9AmvhBvm7mENmKyohKMuOz/BtdQPMWI8/+T+vHhBN23KyzUg x2CgesWhC7v+I+DSypHg== X-Google-Smtp-Source: AGHT+IH3w0PVzJutpZZWvbHJnp14TE6zHYkgRIkeRzvOCfFzjh5nXjFqTNfNUhUJu/4O8mFMK30lFA== X-Received: by 2002:a05:690c:6285:b0:78f:8666:4ba7 with SMTP id 00721157ae682-790b56add94mr37794607b3.49.1767839165938; Wed, 07 Jan 2026 18:26:05 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.25.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:26:05 -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 v8 06/11] bpf,x86: introduce emit_st_r0_imm64() for trampoline Date: Thu, 8 Jan 2026 10:24:45 +0800 Message-ID: <20260108022450.88086-7-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce the helper emit_st_r0_imm64(), which is used to store a imm64 to the stack with the help of r0. Signed-off-by: Menglong Dong --- arch/x86/net/bpf_jit_comp.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index e3b1c4b1d550..a87304161d45 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -1300,6 +1300,15 @@ static void emit_st_r12(u8 **pprog, u32 size, u32 ds= t_reg, int off, int imm) emit_st_index(pprog, size, dst_reg, X86_REG_R12, off, imm); } =20 +static void emit_st_r0_imm64(u8 **pprog, u64 value, int off) +{ + /* mov rax, value + * mov QWORD PTR [rbp - off], rax + */ + emit_mov_imm64(pprog, BPF_REG_0, value >> 32, (u32) value); + emit_stx(pprog, BPF_DW, BPF_REG_FP, BPF_REG_0, -off); +} + static int emit_atomic_rmw(u8 **pprog, u32 atomic_op, u32 dst_reg, u32 src_reg, s16 off, u8 bpf_size) { @@ -3352,16 +3361,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, void *rw_im * mov rax, nr_regs * mov QWORD PTR [rbp - nregs_off], rax */ - emit_mov_imm64(&prog, BPF_REG_0, 0, (u32) nr_regs); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -nregs_off); + emit_st_r0_imm64(&prog, nr_regs, nregs_off); =20 if (flags & BPF_TRAMP_F_IP_ARG) { /* Store IP address of the traced function: * movabsq rax, func_addr * mov QWORD PTR [rbp - ip_off], rax */ - emit_mov_imm64(&prog, BPF_REG_0, (long) func_addr >> 32, (u32) (long) fu= nc_addr); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -ip_off); + emit_st_r0_imm64(&prog, (long)func_addr, ip_off); } =20 save_args(m, &prog, regs_off, false, flags); --=20 2.52.0 From nobody Sun Feb 8 05:37:05 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 6909A28488D for ; Thu, 8 Jan 2026 02:26:16 +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=1767839178; cv=none; b=eAMcYFAybE9n8A/9Lxwf4XrjZahYh3AwX1fT66lvzJCz0xyqlGsw2YjclRVI41sPqLW9S3z7KRKdGJBb/tSrHGJ7nK6IEDL5aZPcbv8DwR84o98NIkqwn5SbdPprxOQXkjg4uticM7cTWFrmTTMUophEuaCsEl9SZaWAiUKw6cM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839178; c=relaxed/simple; bh=XHarCaGaxO4UOuhsLfcJy1QlrtGM5hU6MX1y6/kQaWI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R9kvCZikBQsIPUKry6k4tVBQHpJAyEsNG2NJzA7uFmuGDQmXSofquaxk84dxU5H1J14/KUIChyCtVovW+j36/vJIc6d5cB+v6SggyKI9mQix9bddTzVflAwNqa45RAIHg/TeGNVN/bakGjzaNHZIILJIx7LszGiXBGqBAls9vd8= 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=jRNYeYPC; 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="jRNYeYPC" Received: by mail-yw1-f194.google.com with SMTP id 00721157ae682-78fb7704cb4so27401827b3.3 for ; Wed, 07 Jan 2026 18:26:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839175; x=1768443975; 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=jRNYeYPCTZV36MVyBhM2QbDsGL6xJpiOmOW//F8EBOd/vZTzoS8B/zvXndagQ+9deu TUtUYv56IkZ2B2MprQPzCN+IXMoX8TGI8rN0NLXiO/tcBwR1yLTlBh1AS2cjRRGbmH3/ YZ3clLPwnykHobwYkgMiOcmexGiy1ryFFrSG3r+J1obsobBW8h4ZfIPwgylYS91ra91T teH8hq2bqH6ByPPrSRhMDxYBM/dbWzkRz9IZUaF+k7JF1Z46dUcDGBposkS9Y7UNLdSG 0OuHL2NvPff0h+0jeCFGWTFG8SlEFpDBQ8HVXhbYzr9w8ts8zQnSpFOkMszhLSIAJq48 6+PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839175; x=1768443975; 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=j7PuBr4a3H8hlNfj1To4AL15nE53DYVfnDF+yRlJxWh3bVU5PpqoLKQYj+vWlZ4jFr y0wb6ykHy8la5rxmipMOYqVAAhpBh+LTGm1HpLxmFiTnK4t4NPR5II1Lur9xqMXtCVvI 3jNtOB0nspFu30bMaGd5S4ElQBWuKbQGgWT7jzss8lrxww7NwUOZ6IHELm5cpGcZXHtu wm6XCziC7CORDEsxHekDLUvtfe4gGnt7KyOZpgczMb9q0f0vh0YsFXAl8nQ3YMbO8b9a yRSWWw4cZR+OybOKc59tmf7VQ5xFn2PnvuV5e2/X9mLwIBBOqvlXsnVKXR9xFFfYLvon n3iQ== X-Forwarded-Encrypted: i=1; AJvYcCU7r61FLLo7ynbA0L5DJJOJVcvPgKKJ9j9GECYGUY9qVkDKUiAjV7qzf7eHO2ZagP8VqiJFycgEwuYZ6cw=@vger.kernel.org X-Gm-Message-State: AOJu0YwmV0rWwzyb9eDmDlr8yM/ZdwF+Fk/hJttg+VZeP733Z9jIg3p0 FPyku0ncS6URhBqz073Mc1wT134rwMDrz2s7kDB9e185byTo/UHWgboP X-Gm-Gg: AY/fxX5Kc2jER03xsj6vPYurMVyAJETa5ao1HmFUNptFfYEq9BpKev0MGreIL+wDJKm 9TElbAlSrkGVNxQqdUCQV4Jo1rEbbo9ue3xJPMyQ/aHmekgiqV3EATu5ok+la9dfeWsrLHnU129 8WmN4TxA/IUu09Q0KNL9M2Y1a06qeuSP/Na4yhvIeZo6ByNHH0SMb4yyBRphy2mOecA5b5J08QG 9YzZ7jbWzf7na7a7ywzxOZqtxaV4JUAg7NLqUx+G25OVQp/XcQIhcgmrzyHcKzjI69tDegBvQC0 p5fFRggtOSZPxdfNWK9WtXLoW05oFNUnhSTPJOwbkeU4vyQFPR6pmltwBTr/bSml+wA7CYqGMwd 8wqZx22Ui0gz6GMgD0X3/uyCWZDqmHJzlIT/1ERwsGAPGxEk2nMf38Uf+VLdnf1AChukLASJwPE W18yAAerc= X-Google-Smtp-Source: AGHT+IHMnVMqZPVaDxTm0y829YCzu+J8Kf2pktn+5NZgmMCz24JmIVyO3P2a8IsNKjk6erI9ANmAxg== X-Received: by 2002:a05:690e:4106:b0:642:836:f27 with SMTP id 956f58d0204a3-64716c58afbmr4344656d50.44.1767839175262; Wed, 07 Jan 2026 18:26:15 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.26.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:26:15 -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 v8 07/11] bpf,x86: add fsession support for x86_64 Date: Thu, 8 Jan 2026 10:24:46 +0800 Message-ID: <20260108022450.88086-8-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-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 Sun Feb 8 05:37:05 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 C6B71288C27 for ; Thu, 8 Jan 2026 02:26:24 +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=1767839187; cv=none; b=M7HBtdD86zl9I5KWIRhCYBaZ4tInivpGzQE/cL28Eee7ParkpugklaDPS9rLT/ReV45VGj+ngFil/XDx9geydSO4QjcQeP1RTrkaTGtbm9suE0A2Kx1Jfj7w0/MX41A6Qd4Q6fnZlCQ9v3SZGlOxvShVulmPzRboq1B3SQNcGo4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839187; c=relaxed/simple; bh=6BAjC/h/VbSD1F8qLcHMXta1kjnk/yDOcwCuMgQVEJM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oOFreMbnO4EzKLHnknmemI5CJdS3nz4gLEUb/fY7s6o6EKMYbFQS3M65p/0figDzwfdPMzvw6qeFl0Y4/n+qpmVvboMRPQeYdKDSC2G/Gu9bdbeAvM8kDHXlHUmjhT62KYkI36+yggnZePxiwmlPOUWx4qgYRf5Sazohn3WX9ck= 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=NQu4Cg0s; 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="NQu4Cg0s" Received: by mail-yw1-f194.google.com with SMTP id 00721157ae682-790b7b3e594so13168737b3.3 for ; Wed, 07 Jan 2026 18:26:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839184; x=1768443984; 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=wZvuCmGFnis+CKiifUfzQyTCYKAPuIWEe4J1fR1TapE=; b=NQu4Cg0sAzmyeI52aaV/0alld1bo9mJUZDibUjUJuvdrBIbPHd9OdW66w6QgkcJTIT 4H+vMysIXY03urigOmlpg0gspEev5b16MwThM+qDjjlRCkCCvogtO8jpXaZKLEmVzlJk etaylxZsOuIi/v5jfsFiXXQp2l+R70mRKVTyFCvBWG/bn9Vl513dscx562GPLiQ+5WsU ifZXkI0D+edaI4zb7MqtA7mXbxQCImTuoh3LjVOaRLRK0obE3hJbpWMG+OXRxgoq4Ewk G1coVoblzRztZ3zMZnQ5ftj9m+Bcz4h9rzjmG3fmZBOaP8r4qyAf6eJGYnltudXzqBf6 a99Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839184; x=1768443984; 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=wZvuCmGFnis+CKiifUfzQyTCYKAPuIWEe4J1fR1TapE=; b=bGI3FnEJCh2K2X8JC39mxkGrx6ErZZE8MlJdZPUdDSYuVfSlBUomrcZhXwxy9KfqGn Xo3W216vn+s0gKKR3H/vbiRnwHDc44UvJE0u52PKu8F6WI8wDtkU/ckcc7BErXRI381S /C2hro3kL6cTgha5uzX1uY5ejkK6gWwF/8dleb/HqmKO5NwKbVzqt4xqN0BNgg81zrZA Oa4rxUireRU0L6FTwPkaL+kVbvXDubUEWb8Jsu9xGLankNJhJJMSs8zugo33E42Xl3mL CvOynGulOJ4q2jMu+ih8E9UVgHUtN2Oj6LyG9vDE3YtTSPv0q/LVlBksX4RnMjpwO/Pl QUmA== X-Forwarded-Encrypted: i=1; AJvYcCUYAK7gzLAKxfv9GECepcHgv66NQ9rYuWbaZ0aWXh2Wi+TYpzByc/bVfZKAu9bC80ibBOLmVR4ToX2N2cs=@vger.kernel.org X-Gm-Message-State: AOJu0Yyas6NaFaoLMkYlIv1YjF403Fl97UiQRce6FSkqPTYt4Una+662 JaGj3HjBkFhS6PUHVL8M1srGdKr4QWczvWtIFK8OnRlSguwZIvY4oJwR X-Gm-Gg: AY/fxX4OBQtmtXpWdBIwXbRKxHzuIYh2mOiGgqfLjMLhZ/9M7tVG85EXDxa7xNi4kF5 GW/g3E89Sp8xyiC8biDQrO1VuxxqdT+1JYgw20o9mU1QmeS2ASYLxCyiPf6/7KrVmqEUMhB0yZm dxUWY/QzefmNFYgwA/AUVjHFr6a78vS1TmjEZVxkDtFTstVH3E8mEFhWM2n8Knj3p7AVmZkzqMm aNpHP0/X15M6Gk1d/OEsiKcpEyYG+MA7em1ql8tOMg71CBkRjbsz8ZPPWv26dEkQ7vJB+1fcEuz iA1QpGI7G5eLUw6rUMq3zdYAwrqfjs2E9gznW2I64cKJLBBCaDghzg5LuIeWrNuQqyx6kbCYSvW LL6fRlt7U+i3jkWC7TjNXbcUQEjOVlfwsHULWQgdJff3qsh+zAV6d4L5Di9tl/PO4BtlD7rB2Mi m6uUrxMpo= X-Google-Smtp-Source: AGHT+IFFUkTXq/7pSN80+t865ih2mWirCqzKTDpTj1/OqoorJNS/79kjqGfckfZs/EJueHVA9zaKDA== X-Received: by 2002:a05:690c:6c08:b0:788:14a2:8bda with SMTP id 00721157ae682-790b580708bmr44723687b3.38.1767839183866; Wed, 07 Jan 2026 18:26:23 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.26.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:26:23 -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 v8 08/11] libbpf: add fsession support Date: Thu, 8 Jan 2026 10:24:47 +0800 Message-ID: <20260108022450.88086-9-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-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 6ea81701e274..6564b0e02909 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -115,6 +115,7 @@ static const char * const attach_type_name[] =3D { [BPF_TRACE_FENTRY] =3D "trace_fentry", [BPF_TRACE_FEXIT] =3D "trace_fexit", [BPF_MODIFY_RETURN] =3D "modify_return", + [BPF_TRACE_FSESSION] =3D "trace_fsession", [BPF_LSM_MAC] =3D "lsm_mac", [BPF_LSM_CGROUP] =3D "lsm_cgroup", [BPF_SK_LOOKUP] =3D "sk_lookup", @@ -9859,6 +9860,8 @@ static const struct bpf_sec_def section_defs[] =3D { SEC_DEF("fentry.s+", TRACING, BPF_TRACE_FENTRY, SEC_ATTACH_BTF | SEC_SLE= EPABLE, attach_trace), SEC_DEF("fmod_ret.s+", TRACING, BPF_MODIFY_RETURN, SEC_ATTACH_BTF | SEC_= SLEEPABLE, attach_trace), SEC_DEF("fexit.s+", TRACING, BPF_TRACE_FEXIT, SEC_ATTACH_BTF | SEC_SLEEP= ABLE, attach_trace), + SEC_DEF("fsession+", TRACING, BPF_TRACE_FSESSION, SEC_ATTACH_BTF, attach= _trace), + SEC_DEF("fsession.s+", TRACING, BPF_TRACE_FSESSION, SEC_ATTACH_BTF | SEC= _SLEEPABLE, attach_trace), SEC_DEF("freplace+", EXT, 0, SEC_ATTACH_BTF, attach_trace), SEC_DEF("lsm+", LSM, BPF_LSM_MAC, SEC_ATTACH_BTF, attach_lsm), SEC_DEF("lsm.s+", LSM, BPF_LSM_MAC, SEC_ATTACH_BTF | SEC_SLEEPABLE, atta= ch_lsm), --=20 2.52.0 From nobody Sun Feb 8 05:37:05 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 C95DE2773DA for ; Thu, 8 Jan 2026 02:26:33 +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=1767839195; cv=none; b=TgU0dd7LfYFlnsPhp08+BwfhZJGbfBmWEIVIhCuqwbUW/8KuKVxJWykMC0D2221X4SbE/5l34LRDCTzibnrsF5Siv/lXEM9drQ3dSeFwTC0+xRfCUfFYf6orcFtPcnU3imFPbfl3Y/A17OEcoo9ulA1do5CCnUhRk2qFa14KXsI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839195; c=relaxed/simple; bh=Okg9SIzWIdxMYL9OMbZo8y/oAOt76F10doefVGdAQU8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VCAbMF/Al4ZVTRVnXawJif4Nr1lrtLXLmc+4UwAmijq6/OeiOoGRyZcaaq5Zp7J/sPIpaQ12YWQMb1xmz1KOG7U226lXWX+/ZBLEcDoZTpYXhg1vnVh+kv29kj7g4af/x95KUgQUdlIIoT0SCzElS4AGZnkahEEt8yc4RzZcrqk= 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=f56cDIqp; 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="f56cDIqp" Received: by mail-yw1-f195.google.com with SMTP id 00721157ae682-790b7b3e581so21346537b3.0 for ; Wed, 07 Jan 2026 18:26:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839193; x=1768443993; 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=f56cDIqposY8TTtpUjoQmH5uAN4SjQBwBlIjtYZL4ukGgp0ZufhxraAHSZjOnodgxZ 2zfFOwaeJbxkvxCq7MkeZ+c+pUJWyJxVxEKpTrd2rvL0jLj8xnv2GgHLOO2u/6cML/qV 4hXezlkP2YPnEKKEa5//6U2VKg/fvVtVrQLUtGbTiy79d7P3zl5DoTBfeNOYVjRIN348 dbZo5kjXjDrNe+1CyhchSJI/ywf9873lUYnh3SFb8ykLLQFgRUMnE2Z54/erQGmpgBh3 BxwAZWjvzT0waBLdB+2fu5HlnNLBUr2WlUk2wni5A36amWWaDiqOoso+wghrSq9byni4 5R5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839193; x=1768443993; 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=Lb6XFljL80reo07Qt9JvD6xWk8qXxvBP/+18cD4X+jPJWD8t9VGSogC8oqNlJXe+MN Zq7Zbgi4dFMV/6CrRbtURrKzsvGutNP3OYGcpA7rQcjh6KN1cZ4OvvBs8mbsapectpd+ 6+xzP/kmoyURxMDw4TKigKqhSuLKn5ikHN4Wji2gkFeIJafOaYnEF/ga6i7KxhmOUv2M O1oBJRSx1qEBsDXY4PTUFl53jJqfQFccOL+/fAUTQhRWQw9IK7WD+KiuX3vUoFbS9yUJ 4HPGdLYr76QBd8MI00MEAjCTKBX7TyOhUQHqU10p+FwxVL8jki8hGXqAoBaYVDiDxmMs 4dnA== X-Forwarded-Encrypted: i=1; AJvYcCV/pmyftiZjHqYrJiKDd7zlhNw6NIcx9F1fHhtjr/j4B+8AIaLFj0nfxrxw4vPm6dY5dKSqD9cMLpCApUQ=@vger.kernel.org X-Gm-Message-State: AOJu0YzgjKBWEIV2PsLiu2BtM4q7o0Xwmskt1UKxc7RByu2obnUz5vr/ KEgEUfBblbiSDfTivzbeyRKoOSe4RmX09SxGuAVI14VbIKkSAEqnYHVn X-Gm-Gg: AY/fxX7WQ+5+plOaXnJBlooFxxGg4kC7h+2dzIGL52S2daLFmcnNRPUILcK2GWAMBci +Jc6i5qIO+PD+XDSN57hqXKi01N4Hj6UXUE/JJvHqPwlWTT2XVbOisBUV5xo5ffjXn9K8vGkrZv NGad5/3WRxphTd0zhYsk1Coy48jZHAJPZGuWREMa59OUuzgRJYQ0Fy/+cVbCm1lwAO4jpVx+RE9 SoTSWcrGUIyPsHR0wwbdkePq6pBqFzUlJvjZeQmyhMxwdFFYFvkI9L61/v+1lnL9fF1GJ+7BvON IK3x8tIjAxunxZSjJu7vfIyZikvEFM9b3kE2aMsv6Q+05JzLQhX/31DYFGOeVxr7MeV5KcPB4NK 4FWYhLY7kSD6lNJ604Qcx/l5Z1OR5GjJsZ+r8xZPb+BM7mYLMksuIY8VwEEynsv7Rt3vj4XXcHV xw8ByKebw= X-Google-Smtp-Source: AGHT+IHYt/NSsWiwYrShu4LW0TgHMyVPqE+MzoE8v+YAizyN89kI7nh1A994x+edUWqmXfwkVWzRQw== X-Received: by 2002:a05:690c:6012:b0:786:68da:26ee with SMTP id 00721157ae682-790b574a439mr42878137b3.8.1767839192836; Wed, 07 Jan 2026 18:26:32 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.26.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:26:32 -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 v8 09/11] selftests/bpf: add testcases for fsession Date: Thu, 8 Jan 2026 10:24:48 +0800 Message-ID: <20260108022450.88086-10-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-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 Sun Feb 8 05:37:05 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 4DB3328C2DD for ; Thu, 8 Jan 2026 02:26:44 +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=1767839205; cv=none; b=de+qeEDbdwhYGnKzLs1poyG5g+oKz54AAgu5ra/sCxv4YXFHf81BHoPn91d3TPvqwQRIdpSX10fhME/2Kran9XTkahych4Y19HDe7oNKwnXHVh7HeEGhkmrxaT1Zd3vJJ1Z2JX7MdaP2RkPzjrrgVJJvOR2eWdpzlpZZNERQI4A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839205; c=relaxed/simple; bh=gXCuEnHLqfXsAH6FAwsjxm9SB5MyEaZI5cp68UEcCxA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K35hOVaB7i2JTHagX0PswubmfV+mjRhRP9jwCH0bK5ekFeOFN7G+p2+z+3r+Sm4/6af78ZwkAiBCE0IWNKfvuHVJk7cbAlF9bwaU944wucfnDiWw4P+M/Q6g7ppBguwVJbpdeX7m4y9gPJj7qZ2IjhDbrSXgQ25i/bpWBA39QEI= 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=cf2iwqxe; 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="cf2iwqxe" Received: by mail-yw1-f193.google.com with SMTP id 00721157ae682-78fc3572431so31681537b3.0 for ; Wed, 07 Jan 2026 18:26:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839203; x=1768444003; 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=cf2iwqxeYKYjx47dY1Zt7XddmmI3qpSC3bp3ImKMUpNZnPWKvWJH1ukadANMeS+mas bNqJLyDxYN/knQQbQS1XkfWcgLiXpK2NTId3O+OND8lseu4DilEKjD13bCewUXIdtKLH bE7Eb6piRQ7Ci1YPQVJ659gWVjeGl/3mEEnTCBeQdMzMyOyzH49S2kBcgT4OXToeiV9Q yo+tWUadODL54ZaasrwqbRXEKIfU2CoVL/LNGl164GRbe49lKpv7MxxkYceic59e2pCh wJsHZEEv+/VUzSReCAB/FKeqLnSXUK8zx/wmebZAf6upogN9X7e4qqvTyzSZ2q8pOsK4 rH/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839203; x=1768444003; 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=R2KX/uxxbaShiHjtpZwIWyk7CrSBZdei1NMm7CneWAQkxpXxKJaAxt+j4yr6e3P34U a9AsyyG2bSvOuHzeRekWV5uw9EAuE9nRY5grPQsRGjwZKJlKK0+Tsa2Eo60tq400uxOX QfttHHeuC+Yd18Oxs4lJuuGlmK0CtACpAxK+42VSMEZckAkSKqig1Zqq0oJRNzt/5jQD smSyJIK/qucrsg9Ii1Hk5QnBqrmkKNjxaoqmJot+HEkKuNOvG0lqlnJz6cjdig/kcGiT XtdCnVh6a8HccXi6U2MEbHmt/Wi6yLK66UsLMJh+aMsqk5+nGQGj2UV9RB8MPUXL3UII XoYw== X-Forwarded-Encrypted: i=1; AJvYcCU6ycMvgshzPfoPVsqWGc/odukOAsd9WMRi2utYny+xgSmMdTQ+bw9/pYFDYTeFVzaKJMSks9NgZfrnyak=@vger.kernel.org X-Gm-Message-State: AOJu0YwojU5g5EODoqx0NX33QTWIWUc9Kw8KIIAPWmmD28GpOTYwRy4Q rIg89T3ZnC71MQnLy1AndH9O6QWC9YkIudsMQRIT+h5AEAk/g03ogN5y X-Gm-Gg: AY/fxX4bOjWLtcZbARqY1j9bv4JQBqVoqketIJU/cOZMegzevEW2qp9PtKbUSzAOB+7 0N0pVMcFZFK3iP9+4wfr7pfSYOGKYXwoi4VGHQw/l+qzoAWL2Nwxb/72mreJirZSZSHs6h1qRys 7qSgyiLCrvqv+nOa5k79bk0VIFLHBgPApXTZPFw11QIL4KpUlmoTHp4/mKsnkgAMd6CUs04qz3O MZqqZ6lxfSK9XFm7W8OFshQPzT9rbTyPxn3VszoqwuXrZ/VHfh/y+eXGShkj7SlgHOus4bpEl/Q 1Yj93Y3TVuN/QeMZatp/3RUG+la/BaiGgIQfwGt/QrnWrEJeOKuh8zhpFYsIKS3Qz7mM2d0GAxH jWSRBInhdQqdO9xSi9bv29jFgCwyUhvtyQ2FeGjBY7B0vCksKVBg2o0GNKn6lmJYf2GYhKUbqx1 ZuG6NQNZPs9aTpyHVQUQ== X-Google-Smtp-Source: AGHT+IFIq4+jbgNkL0gcs4PUxnAvdV4wibta+ry60tyzfR5mmVYRra4oL6AAc5EuAHO7q6A+XELDrg== X-Received: by 2002:a05:690e:2515:b0:644:60d9:7514 with SMTP id 956f58d0204a3-64716ce7098mr3231908d50.88.1767839203439; Wed, 07 Jan 2026 18:26:43 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.26.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:26:43 -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 v8 10/11] selftests/bpf: add testcases for fsession cookie Date: Thu, 8 Jan 2026 10:24:49 +0800 Message-ID: <20260108022450.88086-11-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-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 Sun Feb 8 05:37:05 2026 Received: from mail-yx1-f65.google.com (mail-yx1-f65.google.com [74.125.224.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E95E528C2DD for ; Thu, 8 Jan 2026 02:26:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=74.125.224.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839215; cv=none; b=cnYpdGW9aZ0N70tRV5i5ZLq6FIwcycBsvoxWXQwB2f05hBX2wU260XXx/DZEm/r4FdUk337PbO/tATPKlVzlU7GRJ8715l3ke+V6zXAmz9iKBwc7ivkUod/PQefgRFvZKYotmH+95EQxlRswakAHgIDqGN8P1qtA1xFLzX8ZFmM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1767839215; c=relaxed/simple; bh=agW6uKNys5gOeoTrVORTjBOaAxozAsYVc4VUeEIRBqk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kU/8RswQSHk2ovF/OjuvVQgTnBzsT5wbeCHB2I7CUp+eZOh3qvdIt00yx29ixYeCoKHVXqisDAFqPfwiDxB9psnbmrpd19N2A+CwYm71ARvyDn3I/4hGn2e7szwZZ6CRKyrZNg5J2nuRItSckQu55rfZ9Ak5vfa+b/SbPzBbuE4= 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=D+gxs4JB; arc=none smtp.client-ip=74.125.224.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="D+gxs4JB" Received: by mail-yx1-f65.google.com with SMTP id 956f58d0204a3-6442e2dd8bbso2080851d50.0 for ; Wed, 07 Jan 2026 18:26:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767839213; x=1768444013; 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=D+gxs4JBvmPohLOa6xu+ek9dPGh0LUhzNzFdNUgnNa0a7WUf/hKIlxq7lWziQIzJTG +36N2C6K6TWODC4YakBQfQvN4Jqmza1UmsB5rn8O4iLBpmQPvkBQM7iZWSckkpRbGGTp D6k7R3vRny/Fw0wj1QqjEmxLKqytBwUb+KP4APYecMNDSaYIFoccw4pZqln8sWTucRgs UcpKIsOrTWVHhAMRvOYpxZ4FZa0fwAxBTIZVDnvq/KFci/5HenC0d81+1YytnBNUZPkC bMOtcBWV1E/R8Vv0SY70JVZgsQI7iB3Xqt9KVvmy+aeEBxjDGRelbPXrIq/HJLetJ86W T2RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767839213; x=1768444013; 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=ffEnJJvFyqigdoxVfvcO/v4mrfendJoxLN8FP5b4EsasMpLDAYBdMgk117eY0HtlY+ 4T7xXEXQOjTbuu/Bfugaq9SlDV48qt9dxvLgmtiv+zjprW3EuVAsvb+P9b5aPzodooWr ysJgm/f+oCceFuAjOozi9HkIDWFxO811s6k9+PADPyXZJg2NCZugYmontiHrcmX/cwae XcULR2lZan6MulhW4lnVGvOxZauB/8k9x25VMDQE4Dzz+nF4Mgnd8S3ts3zLSoUGdoa5 N9m4WRGFsTcpDYVuQsNWgNH0yNm0rxEUSgKu43hgyOT0i166UXs2TLVx8V2W4CZlqDQm ttNQ== X-Forwarded-Encrypted: i=1; AJvYcCUYG8+D+X+FDWDCGcsaEbF6BWwVQgM5/IoI6CL1jgOQWVc015BZfHbnxf4GL0uwAMLbRgtY/rtdy3f92S4=@vger.kernel.org X-Gm-Message-State: AOJu0YyAuzJ7RiAiw1MelU0WhR8J9Ko3H1PnWYkH3S/nCqTrDjPgmxC1 sKoI/hOK58TuRhm64w/bAzwSNrwHRWoOxKxMbHbKof45jhSRUmH/wyY9 X-Gm-Gg: AY/fxX7+n7OrHdkatumNtn7OEzZ2+lcfHpHcXXa/BWgRHXyUYyZJA21k+k0GTzhuol9 h8blchhN1RmZOKvUoB62/ZQ3ozjEubptgnlqtIRjroxCgcNV1yuwAQfLM5I2Wv7I5EfvvCYC7qX v7dDpHpGi4lidE4RxXD3f3GqHTCip0WFX53OrnsRH3y7fvXZzJs+hSHvkFzWvG2+8lgDX3XVvUN HAwERP2UoyEuZ8ZiYqm7uNUXq833fCJN0+gHNiRdan6khfEZScy6NTCPK2p+wxQKNBJIOHaM0lJ KIsnSVs/7qXIu9CgRUmGzWthwWsuy3yroffGBbVuAJfjmA7d5I8qRuWl9XP5Eh+OSgFfZuzj2ag maboijJAVlk/0ifn39gRRFyb7DpvPuaULuDfNOjwt1dXBOa6zLOdPq3pfsfHJSvn+v7yYEkuAKI SP7Oh7mNY= X-Google-Smtp-Source: AGHT+IHzDlEVf8/d6QbnaKBb4bXfG6njhvfNqB2OjCcNdUEx2bLbQR8avY4Ht9YmtBQ9rseOaNNR2A== X-Received: by 2002:a05:690e:1c1b:b0:647:101f:cc90 with SMTP id 956f58d0204a3-64716c392f0mr4161680d50.53.1767839212841; Wed, 07 Jan 2026 18:26:52 -0800 (PST) Received: from 7940hx ([23.94.188.235]) by smtp.gmail.com with ESMTPSA id 00721157ae682-790aa57deacsm24855027b3.20.2026.01.07.18.26.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 07 Jan 2026 18:26:52 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v8 11/11] selftests/bpf: test fsession mixed with fentry and fexit Date: Thu, 8 Jan 2026 10:24:50 +0800 Message-ID: <20260108022450.88086-12-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260108022450.88086-1-dongml2@chinatelecom.cn> References: <20260108022450.88086-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