From nobody Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E95C9374162 for ; Thu, 15 Jan 2026 11:23:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476195; cv=none; b=FE1bQqAB9cyofP5sk+SnlrFugiRvyo2Fz+e1ow/ZOejNkaPfFuKUpp0xcwnMYOEWzB54K8RmqyVvCBR2vagxrPNA9FuaO747lvdxNoeOvaN6x0loqT6/RKAlmydkQeqszhum5za4rbc7kNaeEkUf2vcCxe+mEZu6WNdHGdBNzjQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476195; c=relaxed/simple; bh=00w0MOz6qEM52/kfa89FqXu7nJiCVo3MmPq7aLYNJoA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=hif2vQiaIFINfHPZDlEkkR7uqm/a9MFW1WniJniRDc+nYANWgXVOKGljdRI32L613Xfwg118OiG3gFLo1I9TpI3o8Ma7V3LMr4F/jJJc8ejybuCLIvofgyVa3R/bbKnDa3/Bq2LCEkxFN41hmjbMo4drN6fzi29q7XY8UwwGhUc= 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=nKk57M6V; arc=none smtp.client-ip=209.85.214.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nKk57M6V" Received: by mail-pl1-f195.google.com with SMTP id d9443c01a7336-2a0a33d0585so5467035ad.1 for ; Thu, 15 Jan 2026 03:23:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476193; x=1769080993; 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=QvO0gu/3jAHo9i8JrJZC4gNrHLLl0/wsBx50HymDBuY=; b=nKk57M6VOSctCFLiNS9+GdWVUYCPzUZkccKVM7Kzlfg3JxcFDuBTm+OzLrT3uhbnmE NXThOX207Zd17ynBs7eWsPZEcZYQi2pQIqhCbZveHV2AADRPszTORR8oJG3n0kzbeSKn PngJGZb4Nyed5tUxwnLgTTlvyLPt0pBTqFh9x4jrhnzahWNdjl4yrKOF+OlMdbIN4lsP WL6vjQ0goo0/khXSmEjGbKNetjupHxr2ZDYgzz9/Sd/4Ygv5CqKaEGNWQpn10Kzyb9wG Dhz3GcAGln6TH5V2BsZPLlNsMQWyd7wsCatspHkmcggGaISM61+DzZgQ3NQj5eZW2A7Z Ek9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476193; x=1769080993; 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=QvO0gu/3jAHo9i8JrJZC4gNrHLLl0/wsBx50HymDBuY=; b=DsKREVPXb+ekBivk5czLSTAz81/8iPpbFf58YU6zNpYmaTGRP3pxjI4y1AGBYzQoSA GNvwWkud0/oJyyWhbF1ayl5gdo5FJxj8PbsKt2TJm9O/PcnnnOA8Of8kpmxIVV4V/Dvi x4oKw8a4ROCRBOMQ3yPpXaVA/jNGlKgSRtTU0n6XM0b+7FnNMZsdUMkXiY2UgpX6ZxTs qE1njAYQT4tecjqY5JM3fCK+SDvAtMwJWL6JCFwxkeU4mgGPt2BiLTAgVU64+2R6RIOV L1ebhhJPUWZHUmX5LZ0FX4/Wlv2W/FbjCUxbtjj+0Lvjvxgt16GVWAdtESZTOFAvvtiE hkdA== X-Forwarded-Encrypted: i=1; AJvYcCWzLprTQ7Yu8lvTepxwr95dwhP3kmvXDcWp0sq8Thy371/ouRPIpfqD6JY5ML+JdTAPyAwKL6vPa6Q5Rw0=@vger.kernel.org X-Gm-Message-State: AOJu0Yy+Ux51ezF0Fk8T4ZzAY6NlEnXqOqyJpOVX9Ly9g1PkaJJgAPBQ FxxcfaZ8PXi0PbFjp0cyqNx2mGYwEVdJD7O/ZyqFCDi+JrHeSP698jtd X-Gm-Gg: AY/fxX4hqszGw9ugwFk+KxdAfb4++EnRlo8uGf/DrWe+MQ++SaS8hddQIGCFhLhV46n de1MEsCMUsSBA5xumEL/d7f9Kwga5vBZTTserFuPRAP0NbLUVqO91pn7He9kMneaUMidiB4ZyDv aChfUPIYqpuGqP+abOL/JXo/5YB1WOl53i1TUMPhicE0hFxPmC1h3xPZnaIOuNYuwL0PqCJ+pbz KQQlBd70z7A8kkDKGW3gnahuCrR2zqx3WS+f/mrHpdRQySSMs92zlPN9Z3RpqWp45xcU5qi6V7S fj8JCsBnjg6hjzRs9E9swy4Y2n8ADPNiohRv71BT75vY7a67cjnNTJCLGUfnii/mZpkMKumB5Ft x/c5Jmzce5K4Zw1pSTHGTiKgmdHlwEzTmhIj3K+5mxkgTWXL2a1ECNk0glaXJvXOrLkDz84mLG+ yhGz1q5o94Cr68n3I+Zg== X-Received: by 2002:a17:902:cecb:b0:2a0:9759:66fe with SMTP id d9443c01a7336-2a599e348a7mr57431705ad.32.1768476193146; Thu, 15 Jan 2026 03:23:13 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.23.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:23:12 -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 v10 01/12] bpf: add fsession support Date: Thu, 15 Jan 2026 19:22:35 +0800 Message-ID: <20260115112246.221082-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The fsession is something that similar to kprobe session. It allow to attach a single BPF program to both the entry and the exit of the target functions. Introduce the struct bpf_fsession_link, which allows to add the link to both the fentry and fexit progs_hlist of the trampoline. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v10: - use switch in bpf_prog_has_trampoline() - some nits adjustment v5: - unify the name to "fsession" - use more explicit way in __bpf_trampoline_link_prog() v4: - instead of adding a new hlist to progs_hlist in trampoline, add the bpf program to both the fentry hlist and the fexit hlist. --- include/linux/bpf.h | 19 +++++++ include/uapi/linux/bpf.h | 1 + kernel/bpf/btf.c | 2 + kernel/bpf/syscall.c | 18 ++++++- kernel/bpf/trampoline.c | 53 ++++++++++++++++--- kernel/bpf/verifier.c | 12 +++-- net/bpf/test_run.c | 1 + net/core/bpf_sk_storage.c | 1 + tools/include/uapi/linux/bpf.h | 1 + .../bpf/prog_tests/tracing_failure.c | 2 +- 10 files changed, 97 insertions(+), 13 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 5936f8e2996f..41228b0add52 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1309,6 +1309,7 @@ enum bpf_tramp_prog_type { BPF_TRAMP_MODIFY_RETURN, BPF_TRAMP_MAX, BPF_TRAMP_REPLACE, /* more than MAX */ + BPF_TRAMP_FSESSION, }; =20 struct bpf_tramp_image { @@ -1875,6 +1876,11 @@ struct bpf_tracing_link { struct bpf_prog *tgt_prog; }; =20 +struct bpf_fsession_link { + struct bpf_tracing_link link; + struct bpf_tramp_link fexit; +}; + struct bpf_raw_tp_link { struct bpf_link link; struct bpf_raw_event_map *btp; @@ -2169,6 +2175,19 @@ static inline void bpf_struct_ops_desc_release(struc= t bpf_struct_ops_desc *st_op =20 #endif =20 +static inline int bpf_fsession_cnt(struct bpf_tramp_links *links) +{ + struct bpf_tramp_links fentries =3D links[BPF_TRAMP_FENTRY]; + int cnt =3D 0; + + for (int i =3D 0; i < links[BPF_TRAMP_FENTRY].nr_links; i++) { + if (fentries.links[i]->link.prog->expected_attach_type =3D=3D BPF_TRACE_= FSESSION) + cnt++; + } + + return cnt; +} + int bpf_prog_ctx_arg_info_init(struct bpf_prog *prog, const struct bpf_ctx_arg_aux *info, u32 cnt); =20 diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 2a2ade4be60f..44e7dbc278e3 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 364dd84bfc5a..c820ac79efe0 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -6219,6 +6219,7 @@ static int btf_validate_prog_ctx_type(struct bpf_veri= fier_log *log, const struct case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: case BPF_MODIFY_RETURN: + case BPF_TRACE_FSESSION: /* allow u64* as ctx */ if (btf_is_int(t) && t->size =3D=3D 8) return 0; @@ -6820,6 +6821,7 @@ bool btf_ctx_access(int off, int size, enum bpf_acces= s_type type, fallthrough; case BPF_LSM_CGROUP: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: /* When LSM programs are attached to void LSM hooks * they use FEXIT trampolines and when attached to * int LSM hooks, they use MODIFY_RETURN trampolines. diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 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..edf9da43762d 100644 --- a/kernel/bpf/trampoline.c +++ b/kernel/bpf/trampoline.c @@ -109,10 +109,17 @@ bool bpf_prog_has_trampoline(const struct bpf_prog *p= rog) enum bpf_attach_type eatype =3D prog->expected_attach_type; enum bpf_prog_type ptype =3D prog->type; =20 - return (ptype =3D=3D BPF_PROG_TYPE_TRACING && - (eatype =3D=3D BPF_TRACE_FENTRY || eatype =3D=3D BPF_TRACE_FEXIT || - eatype =3D=3D BPF_MODIFY_RETURN)) || - (ptype =3D=3D BPF_PROG_TYPE_LSM && eatype =3D=3D BPF_LSM_MAC); + switch (ptype) { + case BPF_PROG_TYPE_TRACING: + if (eatype =3D=3D BPF_TRACE_FENTRY || eatype =3D=3D BPF_TRACE_FEXIT || + eatype =3D=3D BPF_MODIFY_RETURN || eatype =3D=3D BPF_TRACE_FSESSION) + return true; + return false; + case BPF_PROG_TYPE_LSM: + return eatype =3D=3D BPF_LSM_MAC; + default: + return false; + } } =20 void bpf_image_ksym_init(void *data, unsigned int size, struct bpf_ksym *k= sym) @@ -559,6 +566,8 @@ static enum bpf_tramp_prog_type bpf_attach_type_to_tram= p(struct bpf_prog *prog) return BPF_TRAMP_MODIFY_RETURN; case BPF_TRACE_FEXIT: return BPF_TRAMP_FEXIT; + case BPF_TRACE_FSESSION: + return BPF_TRAMP_FSESSION; case BPF_LSM_MAC: if (!prog->aux->attach_func_proto->type) /* The function returns void, we cannot modify its @@ -594,8 +603,10 @@ static int __bpf_trampoline_link_prog(struct bpf_tramp= _link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog) { + struct bpf_fsession_link *fslink =3D NULL; enum bpf_tramp_prog_type kind; struct bpf_tramp_link *link_exiting; + struct hlist_head *prog_list; int err =3D 0; int cnt =3D 0, i; =20 @@ -621,24 +632,43 @@ static int __bpf_trampoline_link_prog(struct bpf_tram= p_link *link, BPF_MOD_JUMP, NULL, link->link.prog->bpf_func); } + if (kind =3D=3D BPF_TRAMP_FSESSION) { + prog_list =3D &tr->progs_hlist[BPF_TRAMP_FENTRY]; + cnt++; + } else { + prog_list =3D &tr->progs_hlist[kind]; + } if (cnt >=3D BPF_MAX_TRAMP_LINKS) return -E2BIG; if (!hlist_unhashed(&link->tramp_hlist)) /* prog already linked */ return -EBUSY; - hlist_for_each_entry(link_exiting, &tr->progs_hlist[kind], tramp_hlist) { + hlist_for_each_entry(link_exiting, prog_list, tramp_hlist) { if (link_exiting->link.prog !=3D link->link.prog) continue; /* prog already linked */ return -EBUSY; } =20 - hlist_add_head(&link->tramp_hlist, &tr->progs_hlist[kind]); - tr->progs_cnt[kind]++; + hlist_add_head(&link->tramp_hlist, prog_list); + if (kind =3D=3D BPF_TRAMP_FSESSION) { + tr->progs_cnt[BPF_TRAMP_FENTRY]++; + fslink =3D container_of(link, struct bpf_fsession_link, link.link); + hlist_add_head(&fslink->fexit.tramp_hlist, &tr->progs_hlist[BPF_TRAMP_FE= XIT]); + tr->progs_cnt[BPF_TRAMP_FEXIT]++; + } else { + tr->progs_cnt[kind]++; + } err =3D bpf_trampoline_update(tr, true /* lock_direct_mutex */); if (err) { hlist_del_init(&link->tramp_hlist); - tr->progs_cnt[kind]--; + if (kind =3D=3D BPF_TRAMP_FSESSION) { + tr->progs_cnt[BPF_TRAMP_FENTRY]--; + hlist_del_init(&fslink->fexit.tramp_hlist); + tr->progs_cnt[BPF_TRAMP_FEXIT]--; + } else { + tr->progs_cnt[kind]--; + } } return err; } @@ -672,6 +702,13 @@ static int __bpf_trampoline_unlink_prog(struct bpf_tra= mp_link *link, guard(mutex)(&tgt_prog->aux->ext_mutex); tgt_prog->aux->is_extended =3D false; return err; + } else if (kind =3D=3D BPF_TRAMP_FSESSION) { + struct bpf_fsession_link *fslink =3D + container_of(link, struct bpf_fsession_link, link.link); + + hlist_del_init(&fslink->fexit.tramp_hlist); + tr->progs_cnt[BPF_TRAMP_FEXIT]--; + kind =3D BPF_TRAMP_FENTRY; } hlist_del_init(&link->tramp_hlist); tr->progs_cnt[kind]--; diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index faa1ecc1fe9d..db935eaddc2d 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -17450,6 +17450,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: @@ -23342,6 +23343,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); @@ -24286,7 +24288,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 @@ -24301,7 +24304,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 { @@ -24385,6 +24388,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); @@ -24551,6 +24555,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; @@ -24632,9 +24637,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 Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BA4C3376BF3 for ; Thu, 15 Jan 2026 11:23:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476204; cv=none; b=Q9CA156aZztET6kU8EGdY1UGyRXGFvierlZjArxwTO8vTMtI7g0sh7HnUtwvWdOgr/gsW4vXWQjy3l610ZuWh9Bo8ww1Ptg4x5kmknmsF9lwccaFjgB2j50YmypAOp/2tyAPbR5HW7oHKajolVgtT9x4b0boP+yP3CcuApTSONo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476204; c=relaxed/simple; bh=KE/DuWBKYg5O3zJs9ZIF7Q/rT/si5I5pQpUSMKjYNMw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kKtEduZvIw8tLPrs+wUOpNGf+eGlsi8VbIRfENHjXohDs3ukp6vMch7WMho4qFkRmZmjcCIWMUtgX8O1Un4rXethlJc20h+0C9lgHO1UvL3brm1rKFBR1gkHzzXxXW4GHQwO/OV4l7DFSuBJ9FO58J9d5ddlf4YsmwlTsyMkfqY= 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=HHiCp2SW; arc=none smtp.client-ip=209.85.214.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="HHiCp2SW" Received: by mail-pl1-f194.google.com with SMTP id d9443c01a7336-29f0f875bc5so5752565ad.3 for ; Thu, 15 Jan 2026 03:23:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476202; x=1769081002; 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=m5zxBe3+cTqgASBHb1dABIGIsf05vgOpwgQe3a0CdAI=; b=HHiCp2SW9ps9kuUx99iTzW59K8BgI4UeMVR0BEgxcx96i7XChRwaMwbfQUFAUb7zqO pS5ygA7Q9yPx2bsdW4ZNCeMDCJRPE6YiTL1WL0wv/ZouyLyo5t3VJvmJ9SPC+F9o0xh2 f4bFYW7CwHErPoqi9fyLAcgfGD+A8PgIJgerfRQr+zHV6KCNPVUuQbPGW8CE9bu0OIKO Vw0iTnu+iRQOrd5TatT0hclJmLCEoWHOrJqD6Bu3y/NotJV2YHoCKQudko0bW8MdEX1g p7oG44wyWaW1e0b8yI988glLKV7GJK2cLVza/zn5VL/6K2yHwdjwSaGDwxac5SyVT8CB Jxag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476202; x=1769081002; 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=m5zxBe3+cTqgASBHb1dABIGIsf05vgOpwgQe3a0CdAI=; b=hrMR76OXEfUKpvrJAwVmIf6GZP7dA9KZqCZh981PgyrjG3gPd/527Qhd0zGyI16x6Y ys0rlAFO4TTrpl2NXBZPANkyu7QWSdYX+P2IRzUAkZuan30q09nxUteZQQwsWO/UUCE3 7wuzhuamQyexGECvgJhvWXbgzL3Px2Q3vG/oAEKiPaQQiu3tY458cNwFTTHLFqDtodpD 4JIP3Ax+g100xeDv8T9sKFynZXSHsqQB9AnewdTFiMoJ9OAmAB2tfrIyAiB8MZVWaSMV 6QJf/WuhFQeJQ7w4whR1ZLv8/xNB32PCbrAlMoJcJ5KBgYGEhr7vCp8+CveNrSk7R9m2 Tz6Q== X-Forwarded-Encrypted: i=1; AJvYcCWDWu345Myp9d6OY9um6ekmvXAnx2IxXQNe7nBm1k1btRJex19lWqIpZHN2c+fmlqj9GtC81ckHKtQXtT8=@vger.kernel.org X-Gm-Message-State: AOJu0Yw8t4ay5HrEjpmsZ+elX96acyBQRRalKiDRKlYgAybCRN6t1dy/ 5Y+nZRVIweyNfoDrxj3X4CGD7wuy++bTi9DEOWLOEE9hQLJ3WELIaB8Q X-Gm-Gg: AY/fxX4S4dOmxftrmxc5d6i0yUz1P+2XIIG3NtHUCXZbKEGj+lGeclEibScGXDLC6m0 pbBjuZ/GAN82Nsohf3iQ2fzJiNPvclrYpQKTy14miqaY3T2pSOQomJNQViEhaw6bi3ChDtcmZlr lVDSVKi436YNtKCl2UxeZhb6k/CnhYXzrVMlUANmgyWMBRm9rEcBxydA4zslgw1idTGyEjx8UU1 aHerRhF5e6e+aLNd3YoohAToyd8NTNrw+uqmC65JwFCIHZZF3VDN9dkj2gLRt0eHYWp4hQxKD6S YUqI9nAVQnoqcS3Lyiq0bybz8pqSb4KrOr8Q+7H/Izo8ALiolY6mnPOMgt6cCBhpb2ULxCM+79w E6tGio6nnMwMjMQfFEc+0c3D8EEhqvMbhwMSF1/sdHZsskQrnSv1WsCUv3y4MwpTYIhYfbgFO5y zur9Sehk/tVJZarWCw4w== X-Received: by 2002:a17:902:fc48:b0:2a0:a9f8:48f7 with SMTP id d9443c01a7336-2a59bc4a116mr53857735ad.55.1768476202044; Thu, 15 Jan 2026 03:23:22 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.23.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:23:21 -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 v10 02/12] bpf: use the least significant byte for the nr_args in trampoline Date: Thu, 15 Jan 2026 19:22:36 +0800 Message-ID: <20260115112246.221082-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For now, ((u64 *)ctx)[-1] is used to store the nr_args in the trampoline. However, 1 byte is enough to store such information. Therefore, we use only the least significant byte of ((u64 *)ctx)[-1] to store the nr_args, and reserve the rest for other usages. Signed-off-by: Menglong Dong --- v10: - some adjustment to the subject and commit log to make the description more precise. v8: - fix the missed get_func_arg_cnt --- kernel/bpf/verifier.c | 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 db935eaddc2d..f7eec19df803 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -23319,15 +23319,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) @@ -23347,12 +23348,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; @@ -23373,8 +23375,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 Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 289CB2D94BA for ; Thu, 15 Jan 2026 11:23:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476213; cv=none; b=q8OB+/EHPsDJzEMiJ+FnOwYNHuaTy0V3JnjfBKeBt4KUXdZ5DUS77Wj9BHQlq3wDWEBrqssD/B/lrtGJwdaJ+BLCDM8xSW+JV86hSivlPma+f3hRoP7TqgQ8MNlMv+Ddlq/iEyHX29v008l+RmNtjwXYCZRMROyqbbb1mQH/OQc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476213; c=relaxed/simple; bh=JKCHfq/RfD0Iu7xpNMldqPQCwqMrsRWsliZhXQHUBMc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PBR1rxsxluYeDiAj/wtDD48UuXlG7msExhvleQ+mXRQRsVtERgn7TFYo3NDFNKYI6aGOKy3pJzAzFxJ9VrRy33bYr61NW9t37bfKhXIv+gI0Iu/hS1F4R0mhoPXouGpdTRRYfygKufNEch2V3eGxTdQ5y+iLG1K9wDNnGiTunm4= 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=NGuap/zh; arc=none smtp.client-ip=209.85.214.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NGuap/zh" Received: by mail-pl1-f195.google.com with SMTP id d9443c01a7336-29f2676bb21so7572845ad.0 for ; Thu, 15 Jan 2026 03:23:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476211; x=1769081011; 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=zknBPP+RIEO6/XhrUklVV0uXdmqx/DuLBRgSks+XejI=; b=NGuap/zhPJYPOM0DxyNmT9ytXECN1+mwQl+XCix3NTk7sgtEQhhWwhg8AR7uSZa2EF ayebdT2ZwVq4tRjJHh4ULijzrutB1Gwf+1M6EO4QNIXesB9YWY482dnIAhzMw+pSbfqn CyWQ7GPcKbWH1WAzghr+Q74286UppqPGuE9mDBDHFt6e/D4JLfjo3btj5NRGHrhv30pt UyI3e1gl4ugA1/ou2lCbdKstYSb8vA42Wg3bXCnlJ2KXLq1PIA2dXI0qDigXAZXrxw2Z UoVHTO45C3dncHlb0FIaWZBztVl/HrqmQ25TeJfQNq9dOnjbh3wUb/no7lt7XPJ/PvJa Ldtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476211; x=1769081011; 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=zknBPP+RIEO6/XhrUklVV0uXdmqx/DuLBRgSks+XejI=; b=ocahANmZUsm3lAGjOh8EJNd35wFgHdaE4WQX51r2LBwPyTYxHmFo/xBnT9BiSxqBb/ Zf6DZPWBH1EDfW0NWFUQVNKZckahpz/OPYeGccaQ5eRAsZ8n2jSC0La/sEX8ll+d1s+z ZWiZUW1VfVnp5+uwCw0Qoxns1WMGeNpb18+1ruUUQwMghXu0YI2PdDnYVyml2Qi9jNeL 2K96SvjZ0VH5X0+hakgF1RC0HAnoKeGeIBgL7unyl5jdT+GKlxiURZuMXfBu6S+df1PE dFmaAnxGP12M7r6COSuYgPmHvrGtBzlrN1R9CbP/6MxQgp0CHRiqMr8D55CgZUzdiQqA XRCw== X-Forwarded-Encrypted: i=1; AJvYcCVnBaH9w6lFAiQ/KU9C8D8nyGTVjBgphUG8XasYQzrGHbBXhX36H8orUQjhQIyV4Yvn6QGu0oOzLmtCD98=@vger.kernel.org X-Gm-Message-State: AOJu0Yxz/i/vvEF+vUWXc9DX6Q0IXt1yrx23r3Tf2nOctV0Q87ucVnmX CpmNgaicpcvl5fvHFF0IIM5E+Ixp4AW0fYkkFYlJhIrof6J1erhEJACz X-Gm-Gg: AY/fxX4BzZE2+H1QA71IVSCq9Rf28sutIKIKv+oxD/CBXV+rCuGPHQ0PL+zoGR+zsuB BD3mLxUb1dD2Kz4Cv/6HZk0khe3n9TfayNZkwiex4/UmzCjQuj/psfHpGziFjaPXghPcyQkrBmQ JiuvH5y2TOW4zTjAPooDCBkTcEh14J2ujBZob0cVMV6bH2vHi+JXDEbrjDe4dziLcj1lkaboPYD igmZJybi6+qOraKCi4rdWJEVgo2pgi1JRMCjlLc+YfqkjuhuhLEY0l0geoSGVaiXBx80HFLNd2q 65+s9K9rDyTvqZ02zt+cajwrMYTTcP/YHRAc2jLp89Rpj78J2nUmdToHPEza93juXjRwCUkhdKf 9+P2Iafi2jmvDpBVQ6iaWObR0Sq8dmP2ebEvRn6WsOjbRAe6BRB21BCHz4bE/3NzZSKrJPQXnMd PNRlcY6GPpvWUxpfkE1g== X-Received: by 2002:a17:903:f86:b0:2a0:de4f:cad with SMTP id d9443c01a7336-2a599e719e7mr53720365ad.60.1768476211241; Thu, 15 Jan 2026 03:23:31 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.23.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:23:30 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v10 03/12] bpf: change prototype of bpf_session_{cookie,is_return} Date: Thu, 15 Jan 2026 19:22:37 +0800 Message-ID: <20260115112246.221082-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add the function argument of "void *ctx" to bpf_session_cookie() and bpf_session_is_return(), which is a preparation of the next patch. The two kfunc is seldom used now, so it will not introduce much effect to change their function prototype. Signed-off-by: Menglong Dong Acked-by: Andrii Nakryiko --- v10: - drop the declaration of bpf_session_is_return() and bpf_session_cookie() --- kernel/bpf/verifier.c | 6 +++++- kernel/trace/bpf_trace.c | 4 ++-- tools/testing/selftests/bpf/bpf_kfuncs.h | 3 --- .../bpf/progs/kprobe_multi_session_cookie.c | 15 +++++++-------- .../selftests/bpf/progs/uprobe_multi_session.c | 7 +++---- .../bpf/progs/uprobe_multi_session_cookie.c | 15 +++++++-------- .../bpf/progs/uprobe_multi_session_recursive.c | 11 +++++------ 7 files changed, 29 insertions(+), 32 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index f7eec19df803..1ed41ba8b54c 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -12370,6 +12370,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) @@ -12447,6 +12448,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) { @@ -12501,7 +12503,9 @@ get_kfunc_ptr_arg_type(struct bpf_verifier_env *env, struct bpf_reg_state *reg =3D ®s[regno]; bool arg_mem_size =3D false; =20 - if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx]) + if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_return] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]) return KF_ARG_PTR_TO_CTX; =20 if (argno + 1 < nargs && diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 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..7dad01439391 100644 --- a/tools/testing/selftests/bpf/bpf_kfuncs.h +++ b/tools/testing/selftests/bpf/bpf_kfuncs.h @@ -79,9 +79,6 @@ extern int bpf_verify_pkcs7_signature(struct bpf_dynptr *= data_ptr, struct bpf_dynptr *sig_ptr, struct bpf_key *trusted_keyring) __ksym; =20 -extern bool bpf_session_is_return(void) __ksym __weak; -extern __u64 *bpf_session_cookie(void) __ksym __weak; - struct dentry; /* Description * Returns xattr of a dentry diff --git a/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.= c b/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c index 0835b5edf685..ad627016e3e5 100644 --- a/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c +++ b/tools/testing/selftests/bpf/progs/kprobe_multi_session_cookie.c @@ -1,9 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 -#include +#include #include #include #include -#include "bpf_kfuncs.h" =20 char _license[] SEC("license") =3D "GPL"; =20 @@ -23,16 +22,16 @@ int BPF_PROG(trigger) return 0; } =20 -static int check_cookie(__u64 val, __u64 *result) +static int check_cookie(struct pt_regs *ctx, __u64 val, __u64 *result) { __u64 *cookie; =20 if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - cookie =3D bpf_session_cookie(); + cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) + if (bpf_session_is_return(ctx)) *result =3D *cookie =3D=3D val ? val : 0; else *cookie =3D val; @@ -42,17 +41,17 @@ static int check_cookie(__u64 val, __u64 *result) SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_1(struct pt_regs *ctx) { - return check_cookie(1, &test_kprobe_1_result); + return check_cookie(ctx, 1, &test_kprobe_1_result); } =20 SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_2(struct pt_regs *ctx) { - return check_cookie(2, &test_kprobe_2_result); + return check_cookie(ctx, 2, &test_kprobe_2_result); } =20 SEC("kprobe.session/bpf_fentry_test1") int test_kprobe_3(struct pt_regs *ctx) { - return check_cookie(3, &test_kprobe_3_result); + return check_cookie(ctx, 3, &test_kprobe_3_result); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session.c b/too= ls/testing/selftests/bpf/progs/uprobe_multi_session.c index 30bff90b68dc..6e46bb00ff58 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session.c @@ -1,9 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 -#include +#include #include #include #include -#include "bpf_kfuncs.h" #include "bpf_misc.h" =20 char _license[] SEC("license") =3D "GPL"; @@ -51,7 +50,7 @@ static int uprobe_multi_check(void *ctx, bool is_return) SEC("uprobe.session//proc/self/exe:uprobe_multi_func_*") int uprobe(struct pt_regs *ctx) { - return uprobe_multi_check(ctx, bpf_session_is_return()); + return uprobe_multi_check(ctx, bpf_session_is_return(ctx)); } =20 static __always_inline bool verify_sleepable_user_copy(void) @@ -67,5 +66,5 @@ int uprobe_sleepable(struct pt_regs *ctx) { if (verify_sleepable_user_copy()) uprobe_multi_sleep_result++; - return uprobe_multi_check(ctx, bpf_session_is_return()); + return uprobe_multi_check(ctx, bpf_session_is_return(ctx)); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.= c b/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c index 5befdf944dc6..b5db196614a9 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session_cookie.c @@ -1,9 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 -#include +#include #include #include #include -#include "bpf_kfuncs.h" =20 char _license[] SEC("license") =3D "GPL"; =20 @@ -13,16 +12,16 @@ __u64 test_uprobe_1_result =3D 0; __u64 test_uprobe_2_result =3D 0; __u64 test_uprobe_3_result =3D 0; =20 -static int check_cookie(__u64 val, __u64 *result) +static int check_cookie(struct pt_regs *ctx, __u64 val, __u64 *result) { __u64 *cookie; =20 if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - cookie =3D bpf_session_cookie(); + cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) + if (bpf_session_is_return(ctx)) *result =3D *cookie =3D=3D val ? val : 0; else *cookie =3D val; @@ -32,17 +31,17 @@ static int check_cookie(__u64 val, __u64 *result) SEC("uprobe.session//proc/self/exe:uprobe_multi_func_1") int uprobe_1(struct pt_regs *ctx) { - return check_cookie(1, &test_uprobe_1_result); + return check_cookie(ctx, 1, &test_uprobe_1_result); } =20 SEC("uprobe.session//proc/self/exe:uprobe_multi_func_2") int uprobe_2(struct pt_regs *ctx) { - return check_cookie(2, &test_uprobe_2_result); + return check_cookie(ctx, 2, &test_uprobe_2_result); } =20 SEC("uprobe.session//proc/self/exe:uprobe_multi_func_3") int uprobe_3(struct pt_regs *ctx) { - return check_cookie(3, &test_uprobe_3_result); + return check_cookie(ctx, 3, &test_uprobe_3_result); } diff --git a/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursi= ve.c b/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c index 8fbcd69fae22..3ce309248a04 100644 --- a/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c +++ b/tools/testing/selftests/bpf/progs/uprobe_multi_session_recursive.c @@ -1,9 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 -#include +#include #include #include #include -#include "bpf_kfuncs.h" #include "bpf_misc.h" =20 char _license[] SEC("license") =3D "GPL"; @@ -16,11 +15,11 @@ int idx_return =3D 0; __u64 test_uprobe_cookie_entry[6]; __u64 test_uprobe_cookie_return[3]; =20 -static int check_cookie(void) +static int check_cookie(struct pt_regs *ctx) { - __u64 *cookie =3D bpf_session_cookie(); + __u64 *cookie =3D bpf_session_cookie(ctx); =20 - if (bpf_session_is_return()) { + if (bpf_session_is_return(ctx)) { if (idx_return >=3D ARRAY_SIZE(test_uprobe_cookie_return)) return 1; test_uprobe_cookie_return[idx_return++] =3D *cookie; @@ -40,5 +39,5 @@ int uprobe_recursive(struct pt_regs *ctx) if (bpf_get_current_pid_tgid() >> 32 !=3D pid) return 1; =20 - return check_cookie(); + return check_cookie(ctx); } --=20 2.52.0 From nobody Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8BBC33246FD for ; Thu, 15 Jan 2026 11:23:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476222; cv=none; b=rv7Bg9buBlme9uiyrQwT0C+5iSaagFqEwQZ849epJ0F3vX4egHiLOvJmeEtC23F36Yoka0JRI8nlkbBLpMcCIrmVhDvJhg/+WceBZoJPOseD9AI73y9OtNOUxFo6yotb7ykpyHfVpV3RO9P2deOVLCAl5yatFemzzn6U5EbKdW0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476222; c=relaxed/simple; bh=h2POPUrCWHpMV2zB1+yXcWrLuXsEUmU/TGPNd3nPd+8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rUt2IoUbEwyO5t51udPCzU72ji6kO6h1ak0A4pQtzyroFKMdzGl6KufUsDeMuuNZ6WCxFWUvHS1r/+aFHOg0JoXKpQ7GlyH8dPQzE0S225vs6n1/CQckZRebiGVZITGdf09eggXgVWo6bYqfjg6LesOgaP6GfPQnUQbmZ4fvIaE= 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=ZFGYVBnd; arc=none smtp.client-ip=209.85.214.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZFGYVBnd" Received: by mail-pl1-f195.google.com with SMTP id d9443c01a7336-2a137692691so5086105ad.0 for ; Thu, 15 Jan 2026 03:23:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476221; x=1769081021; 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=8YOIKFh1qLe1Kphs2bcVuIDAoYDYGha3UsNg4tIIDho=; b=ZFGYVBndCFkxIwpg+wzCMybLlzf1tY0pUNqnwOBkBJPxyY4/DXul94brIJCKpi0QKP 1fdhc/JTsKue+raqYwPSP0q88BebwWrE6RNdCdWPDFkuEu96wdP7q1JbQxUT8iHuC+d/ oFn5XjgLBflLMeZK6d+WGBTgiWs7CZ0zJXCxL7+lW5mnX+OjUrm4EAaPBjkt6RK2yllJ uCqG7jKg1Lq8Vk9BTpiBYtj0tdrmW7LItJ4Sze6L3RRgscEs2dxBBuVWmQ0FIpOOlk2p M5wp/A73+zLRhPkliMmzCnA9x5CPFNnbWd553OYqcogbBR5uGSQFQtlH0xO0xuo2Y7Ca nb+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476221; x=1769081021; 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=8YOIKFh1qLe1Kphs2bcVuIDAoYDYGha3UsNg4tIIDho=; b=U6ZhVKIkXpHfU+KvsC8nrniyRQYD3w2KecbHFX5Xk0QDfu+HDEsP/roIQl1UmpDhO9 qDU+/60F3WDgjCw72ZAgdza4zFsOtBrkbvopRMAxrgczQnPDue2yObI/0wxyNaCrZoyL eZhEVyOm4bLo/rmZa7uvskDdTBMunustRc3jFYnk4zXFG1xOxI4cigeB1iiBN/cvYmP/ 8u/1debVp8tG2vWslYxO0aUsIa5TWUxBOM70WgU/dtoNNhrBteiXSdSc9VynRVLCa8W6 sfhh72FPgKoodeXEc0V07Mc600LteL1giHImgPwdWpzde3H7+yuYukWfrNgyIvE8sSp2 Qi+Q== X-Forwarded-Encrypted: i=1; AJvYcCXzPIUM1b2jZDB9Rr1TQlsO5aQjcdFj+7EHY5ZWd1Cl/daIs65jkGSrVCQw4zW8JbTC4RHO16UIhBo34lE=@vger.kernel.org X-Gm-Message-State: AOJu0YynVwldXM1h9A+zKdQ7R6z1RlejzdL4oEo5tWcSLj/aecfaLXR9 IKiVIUGWyaap2sg8n2cjuxVW8BFGO4mWCgzX1rzybVpWTYFTfBrnuKeN X-Gm-Gg: AY/fxX6ESjJOK6W4Z3xe4vgdFX/8z6LuPrjZY2uPUMKq6OqVmNe7z6Nqvh10F6VG8Ez ZhhdNsrZ8t7GOLxCBdgMGYdda+MeXNbYKprfIi3pqu4pwg9u5dW/yn9Hqa42DZJFjEt2wMeYYde kIIsY8EAzmEgXvxhnHIGZLZIBvEGtkbSq33fnPx29s1WROVWfAbrqADs4DRrG8GxZtcxpXdqJl+ d5XETuqGKpr7VZYnPwkHKned7UmyXvSLhLmNUWkhIJatIamBYuEQhhNPMYt8Ti46PSuXipbmOmD //YyLvWi9RagmeFaM80kY6zvRpo+79V9JmyzRZQAaxgwo2HLOUTkMUXjegW+Fltgjcoi7EHTFLG E6q0Kh2AU+gAhJGkaN2D84Mg7eMlvT1R03risCzhJdtPQFbGraAW3bb0bru+z4qphrld1qaIrBZ 26unM0IMA= X-Received: by 2002:a17:903:2f8a:b0:295:59ef:809e with SMTP id d9443c01a7336-2a59bb37a31mr53429035ad.24.1768476220937; Thu, 15 Jan 2026 03:23:40 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.23.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:23:40 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v10 04/12] bpf: support fsession for bpf_session_is_return Date: Thu, 15 Jan 2026 19:22:38 +0800 Message-ID: <20260115112246.221082-5-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-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_SHIFT_IS_RETURN) in ((u64 *)ctx)[-1] to store the "is_return" flag. The logic of bpf_session_is_return() for fsession is implemented in the verifier by inline following code: bool bpf_session_is_return(void *ctx) { return (((u64 *)ctx)[-1] >> BPF_TRAMP_SHIFT_IS_RETURN) & 1; } Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v10: - fix the wrong description of bpf_session_is_return() in commit log and comment - rename the prefix from BPF_TRAMP_M_ tp BPF_TRAMP_SHIFT_ - remove the definition of BPF_TRAMP_M_NR_ARGS - use 63 for the shift of BPF_TRAMP_SHIFT_IS_RETURN - check the program type in bpf_session_filter() v9: - remove the definition of bpf_fsession_is_return() v7: - reuse the kfunc bpf_session_is_return() instead of introduce new kfunc v4: - split out the bpf_fsession_cookie() to another patch v3: - merge the bpf_tracing_is_exit and bpf_fsession_cookie into a single patch v2: - store the session flags after return value, instead of before nr_args - inline the bpf_tracing_is_exit, as Jiri suggested --- include/linux/bpf.h | 2 ++ kernel/bpf/verifier.c | 13 +++++++++++++ kernel/trace/bpf_trace.c | 39 ++++++++++++++++++++++++++------------- 3 files changed, 41 insertions(+), 13 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 41228b0add52..4f72d553f52b 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1229,6 +1229,8 @@ enum { #endif }; =20 +#define BPF_TRAMP_SHIFT_IS_RETURN 63 + struct bpf_tramp_links { struct bpf_tramp_link *links[BPF_MAX_TRAMP_LINKS]; int nr_links; diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 1ed41ba8b54c..2efe458f9bad 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -22604,6 +22604,19 @@ static int fixup_kfunc_call(struct bpf_verifier_en= v *env, struct bpf_insn *insn, desc->func_id =3D=3D special_kfunc_list[KF_bpf_rdonly_cast]) { insn_buf[0] =3D BPF_MOV64_REG(BPF_REG_0, BPF_REG_1); *cnt =3D 1; + } else if (desc->func_id =3D=3D special_kfunc_list[KF_bpf_session_is_retu= rn] && + env->prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + /* + * inline the bpf_session_is_return() for fsession: + * bool bpf_session_is_return(void *ctx) + * { + * return (((u64 *)ctx)[-1] >> BPF_TRAMP_SHIFT_IS_RETURN) & 1; + * } + */ + insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_SHIFT_IS_RET= URN); + 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..3f5460a6da47 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -1286,7 +1286,8 @@ static bool is_kprobe_multi(const struct bpf_prog *pr= og) =20 static inline bool is_kprobe_session(const struct bpf_prog *prog) { - return prog->expected_attach_type =3D=3D BPF_TRACE_KPROBE_SESSION; + return prog->type =3D=3D BPF_PROG_TYPE_KPROBE && + prog->expected_attach_type =3D=3D BPF_TRACE_KPROBE_SESSION; } =20 static inline bool is_uprobe_multi(const struct bpf_prog *prog) @@ -1297,7 +1298,14 @@ static inline bool is_uprobe_multi(const struct bpf_= prog *prog) =20 static inline bool is_uprobe_session(const struct bpf_prog *prog) { - return prog->expected_attach_type =3D=3D BPF_TRACE_UPROBE_SESSION; + return prog->type =3D=3D BPF_PROG_TYPE_KPROBE && + prog->expected_attach_type =3D=3D BPF_TRACE_UPROBE_SESSION; +} + +static inline bool is_trace_fsession(const struct bpf_prog *prog) +{ + return prog->type =3D=3D BPF_PROG_TYPE_TRACING && + prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION; } =20 static const struct bpf_func_proto * @@ -3334,34 +3342,39 @@ __bpf_kfunc __u64 *bpf_session_cookie(void *ctx) =20 __bpf_kfunc_end_defs(); =20 -BTF_KFUNCS_START(kprobe_multi_kfunc_set_ids) +BTF_KFUNCS_START(session_kfunc_set_ids) BTF_ID_FLAGS(func, bpf_session_is_return) BTF_ID_FLAGS(func, bpf_session_cookie) -BTF_KFUNCS_END(kprobe_multi_kfunc_set_ids) +BTF_KFUNCS_END(session_kfunc_set_ids) =20 -static int bpf_kprobe_multi_filter(const struct bpf_prog *prog, u32 kfunc_= id) +static int bpf_session_filter(const struct bpf_prog *prog, u32 kfunc_id) { - if (!btf_id_set8_contains(&kprobe_multi_kfunc_set_ids, kfunc_id)) + if (!btf_id_set8_contains(&session_kfunc_set_ids, kfunc_id)) return 0; =20 - if (!is_kprobe_session(prog) && !is_uprobe_session(prog)) + if (!is_kprobe_session(prog) && !is_uprobe_session(prog) && !is_trace_fse= ssion(prog)) return -EACCES; =20 return 0; } =20 -static const struct btf_kfunc_id_set bpf_kprobe_multi_kfunc_set =3D { +static const struct btf_kfunc_id_set bpf_session_kfunc_set =3D { .owner =3D THIS_MODULE, - .set =3D &kprobe_multi_kfunc_set_ids, - .filter =3D bpf_kprobe_multi_filter, + .set =3D &session_kfunc_set_ids, + .filter =3D bpf_session_filter, }; =20 -static int __init bpf_kprobe_multi_kfuncs_init(void) +static int __init bpf_trace_kfuncs_init(void) { - return register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_kprobe_multi_= kfunc_set); + int err =3D 0; + + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_sessi= on_kfunc_set); + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_TRACING, &bpf_sess= ion_kfunc_set); + + return err; } =20 -late_initcall(bpf_kprobe_multi_kfuncs_init); +late_initcall(bpf_trace_kfuncs_init); =20 typedef int (*copy_fn_t)(void *dst, const void *src, u32 size, struct task= _struct *tsk); =20 --=20 2.52.0 From nobody Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E78692BDC0F for ; Thu, 15 Jan 2026 11:23:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476232; cv=none; b=W9D2MIJ+RUr2xwaO2JEnQWqh1FMe9qBLpVuT8WShtbElGWRPwO4rTzjlG8/CHhDTUjJDTYoDeWCCiZG13KkdGexC8jIjSI24ZHyzNveThxLGZxZBYvZMAkakyczzgb9ccqWHsEqhRLLjb9JF+413RdQr+HkwGfyf+LISZb7dmGo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476232; c=relaxed/simple; bh=70uxJsBQdJTCq6o5pWVjXSAUli/F59boJa8Lmi5oQQ0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fEU6OdFs0oGLDbY/7ulvrpEXNDqDviXpvKPgaNg+Ya1PAIoI9oet1UAtG9DYddyg8wSRwktj9z8pJdEMLPBn1KElN6G54n9x8vMFyixboA+jl3LSqb9m6AIx1wIt9F7D5ICY1HRa7AMk3YNZYB/J+3mTGppfEURlLBMMIKYDBYc= 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=M8vHIxeC; arc=none smtp.client-ip=209.85.214.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="M8vHIxeC" Received: by mail-pl1-f193.google.com with SMTP id d9443c01a7336-2a137692691so5086985ad.0 for ; Thu, 15 Jan 2026 03:23:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476230; x=1769081030; 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=O/SVBFySwYnFgzCd+lOHdFqf2Vleur+xFZa5r+xY3I4=; b=M8vHIxeChXY7mp+UQdkoBlbjwbWelvJcygTzGlPVoZvJwMBZ3sQeiAp69m4YoLAvKm 9CQ8N8GlmynHYSED0PPVXpEsOfA70kLoQMIlAzI1R8Bz0QRVJZN6tocxbm/l6wndiO0f Fr2xj2bKkUGy8X4+BOYbaO0bEBRXiR1td4UX0FzbTJc5WvCvdk7Q7C9Sdb0hXcXO6RhV +3hKmsRFlW8nzZnRwErP61QT1gfK49YguHXywvwVWunJow0hUvX+YE2QYyAiF7MNqWTO 5eqoytd0r2LFDqIumZTHHczDSIENMyfvYuuXWfanrSeZO8OZcJs1h5dCDD7YH07odUJZ wp0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476230; x=1769081030; 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=O/SVBFySwYnFgzCd+lOHdFqf2Vleur+xFZa5r+xY3I4=; b=i2qW5EQsFyTU9/gHWwbwsHAh2yGeC67KL+j+RdlSjGIJdzXU1GknLSuQrJMc5OIYdb KPraTKPfV06bS6w+PHLN3j3CDkrUjLlIMuVdZReCRhsXCejwmVCqKkzuFoQ6Y51YpnqH SnUZdzv2mNvDviip/5dzp1+KxmhIjvhuQJgyP9qKym5bWLwOG+zTCluXXCWA9zSZqXi+ uXjJT8SueBgAWyZiJleHySOVMZ+NtRWPYK1eYdgGB6WX2mqGn+yit25jNdkLsrzQW5Bs oZGDsaE1nJhX1lzrn+oAJwoWlDwS4wlF1LOZg/ulS+Xj1UVZRYhGMJ1szrK3y2TO3max 92fQ== X-Forwarded-Encrypted: i=1; AJvYcCXXu5PVh4roNDP9e++b+BBpbin0GuDvEP8ETn0OdRBpI9fknxkMzZzqTWy0rq8hcdW/TJW1f8jB6fmsRBw=@vger.kernel.org X-Gm-Message-State: AOJu0YxDh+tolxOkTz1NqwwG6G3vs9eFlcWK0/qG7nzqixrHw2j585FV OufJuwWWftLpfaAWhxP7awDaq4LToN+nVHtZGoaT803C+GYLQJso9NY4 X-Gm-Gg: AY/fxX4muunDlgfUZ2wJVHxQWI3oP8ZFPhSClEPteYbr61zL4mj4GMrEmn02rEiJkw5 /rwNjtqYrwmkVeZkq9vWR3rhuDpvvItTpeGnIixOmnRzD756DtQGBKUJoqWP6dvgRww93L4tN// 9aeB1ZXNa1kEcKghvflJfcv4zstIGMNx8RTcGP6tFsrKgrWcaC6xkyNkMIh1Da3/Hvkr9SIoIoa 823fmTaCl+2r+kjuHZUQlmvTHrXzimCJrq9FoJ4Z84g/8S6XWSV419thHz6o1SJvYoo/4XgR5mB 1QKbDC6jbz/Iw4sCf0SW5O8yfjvm5OVkQIzrM3hQunVPl60/c289eSssoK7qmXu3TrSUZVjcSEd +EVh+8Hj/ACm7O532eGset3cbu4ks5KcOJ/N1PqXT2IUpUumQP1ldWa+nS8LONwHQ/W4SOeUinA 6gb5pox1w= X-Received: by 2002:a17:902:cf06:b0:298:3aa6:c03d with SMTP id d9443c01a7336-2a59bc61e10mr49446395ad.57.1768476230265; Thu, 15 Jan 2026 03:23:50 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.23.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:23:49 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v10 05/12] bpf: support fsession for bpf_session_cookie Date: Thu, 15 Jan 2026 19:22:39 +0800 Message-ID: <20260115112246.221082-6-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement session cookie for fsession. The session cookies will be stored in the stack, and the layout of the stack will look like this: return value -> 8 bytes argN -> 8 bytes ... arg1 -> 8 bytes nr_args -> 8 bytes ip (optional) -> 8 bytes cookie2 -> 8 bytes cookie1 -> 8 bytes The offset of the cookie for the current bpf program, which is in 8-byte units, is stored in the "(((u64 *)ctx)[-1] >> BPF_TRAMP_M_COOKIE) & 0xFF". Therefore, we can get the session cookie with ((u64 *)ctx)[-offset]. Implement and inline the bpf_session_cookie() for the fsession in the verifier. Signed-off-by: Menglong Dong --- v10: - describe the offset of the session cookie more explicit - make 8 as the bit shift of session cookie - remove the session cookie count limitation v9: - remove the definition of bpf_fsession_cookie() v7: - reuse bpf_session_cookie() instead of introduce new kfunc v5: - remove "cookie_cnt" in struct bpf_trampoline v4: - limit the maximum of the cookie count to 4 - store the session cookies before nr_regs in stack --- include/linux/bpf.h | 15 +++++++++++++++ kernel/bpf/verifier.c | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 4f72d553f52b..551d2cb0ec7d 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1229,6 +1229,7 @@ enum { #endif }; =20 +#define BPF_TRAMP_SHIFT_COOKIE 8 #define BPF_TRAMP_SHIFT_IS_RETURN 63 =20 struct bpf_tramp_links { @@ -1782,6 +1783,7 @@ struct bpf_prog { enforce_expected_attach_type:1, /* Enforce expected_attach_type checki= ng at attach time */ call_get_stack:1, /* Do we call bpf_get_stack() or bpf_get_stackid() */ call_get_func_ip:1, /* Do we call get_func_ip() */ + call_session_cookie:1, /* Do we call bpf_session_cookie() */ tstamp_type_access:1, /* Accessed __sk_buff->tstamp_type */ sleepable:1; /* BPF program is sleepable */ enum bpf_prog_type type; /* Type of BPF program */ @@ -2190,6 +2192,19 @@ static inline int bpf_fsession_cnt(struct bpf_tramp_= links *links) return cnt; } =20 +static inline int bpf_fsession_cookie_cnt(struct bpf_tramp_links *links) +{ + struct bpf_tramp_links fentries =3D links[BPF_TRAMP_FENTRY]; + int cnt =3D 0; + + for (int i =3D 0; i < links[BPF_TRAMP_FENTRY].nr_links; i++) { + if (fentries.links[i]->link.prog->call_session_cookie) + cnt++; + } + + return cnt; +} + int bpf_prog_ctx_arg_info_init(struct bpf_prog *prog, const struct bpf_ctx_arg_aux *info, u32 cnt); =20 diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 2efe458f9bad..3ab2da5f8165 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -14303,6 +14303,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 @@ -22617,6 +22620,23 @@ static int fixup_kfunc_call(struct bpf_verifier_en= v *env, struct bpf_insn *insn, insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_SHIFT_IS_RET= URN); insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1); *cnt =3D 3; + } else if (desc->func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]= && + env->prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION) { + /* + * inline bpf_session_cookie() for fsession: + * __u64 *bpf_session_cookie(void *ctx) + * { + * u64 off =3D (((u64 *)ctx)[-1] >> BPF_TRAMP_SHIFT_COOKIE) & 0xFF; + * return &((u64 *)ctx)[-off]; + * } + */ + insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_SHIFT_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) { --=20 2.52.0 From nobody Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f195.google.com (mail-pl1-f195.google.com [209.85.214.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 216A23793D4 for ; Thu, 15 Jan 2026 11:23:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476241; cv=none; b=OI8mr9pHac+QbcCzU4MXlIt7/Kv0BGbjpkJcbnstOKf5nvjW5cN8Z+MJcsMkC+FJpbHAzQFvMJ9wbGeMTZEnlTWjbz5136W5TSyZuGirsP+ecwRU5maI2xI1qYuaOUKCTqji0fS4h5GeI3Sx1MSyGVN4u3+yR8rE5lBfUJmZsUE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476241; c=relaxed/simple; bh=6fOLPr5pZFj/RQ+K6yXNXzxNF1aapP52tKW6Swnvtbk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gOiVriu+g6lvzxjrTEZnOBb1O+aboQdYfGNX9IvMwAIoSE03ihqY/5b/9NOU3EQlwBp/+Aj5AJf8BK+yJJ5rjORAeNPozPDCIPaI2QylAXJuFmlm8XYjZWQScGoEdIkPBHYqlqoEnZWAzGlHzWholCdeBx6f1lyXFiAW7MCkgzU= 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=K9babHY/; arc=none smtp.client-ip=209.85.214.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="K9babHY/" Received: by mail-pl1-f195.google.com with SMTP id d9443c01a7336-2a0a33d0585so5470645ad.1 for ; Thu, 15 Jan 2026 03:23:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476239; x=1769081039; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=L3QmrLYBEBYXBAfPFlkqBudM2njHTQyGi8eiKfdRBPI=; b=K9babHY/ckbeMC7JWrc2N9zaJeIR32aum9bXI+ItToFP1vuPRVa/ZT3//LSHjBu1bl Fa3fR9nS1pWJmLQJCqqadWNhoPSDJUi0pTF188aG7f+0q13f6SOHK562sCxRuIIaExRX avhBNwopcFqyjsNQ2t0RISqyHDe7qak5/v1h0TOn65LKzD+gDcvSZnodzMHjYeWTIPfF TJdGsMtZ60F741Unep2stHo7TQTLa+SSnBCXapMZz3Pazj1XFt7BPpZF04shZbRx1dvY PHVuW/jT+lpHM4KgTIzY2xSTTFS+x4oys3WFnqXWfz5Dpz/dgVqcJWWxLefGmMzd2+U4 G8mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476239; x=1769081039; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=L3QmrLYBEBYXBAfPFlkqBudM2njHTQyGi8eiKfdRBPI=; b=JVjMXvyb6fz2Jz/KFNQBdlUj0mEbPM5OVQjIRd1EmiK2A1VkzjvBKal0wMSmH4Y5QS 8lP558vcuEfMXWP5kXOpIAycIbqQCNAel+JlyZvsVu+D4MPLtKXNgUUN8XQdd5GB0Rmt vxCa/7JPFvP9XiKAvt8AWCgHGLQvapXUkzvdNWt/eMyIokprieYF5n5FKYt30eON+0Hg BM2GQ0Hw9Y37mBFL5wGU9hjawHhNXvYqt8bpce6LvNOAo06//dgzH6CydUiUvPU+FtkQ vwcP77BgxSNuaNp1XaxTSUBB08b/Wi4di82KilWS1GZRjEH3zAzQ4M0vjTJvg5UzuEOh lbdQ== X-Forwarded-Encrypted: i=1; AJvYcCXAghkbvojbPYqAjvZ4nAQjH6RlBe4l5fOQPqDSpWQ0KXq6WibO9ERrMGQd2gzt98oCnay2LeT0AOaahHQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxzOVOehMvUcE9hoy2uzo68zhjl9nRRGIIxg8ly3EdqB/r0oYxL +YxeLW+DL3s5542ztVVKdnH4qTRs+6ZClEi/5inBkpsX+nh3BJ5oC8le X-Gm-Gg: AY/fxX41zjaQNSPFdUXjrhcn4Of5/8L4bX1PYIiPO7wJzuDu2ix9IYMktCDMcUpqXyq q1Sm2v1OC7EWHMjFoHi2R3g10/w46Xf7DdnUQNTqbCl1q/b18IRjifDrzfWVmiL1Coomi+sYAS0 Fqf25GJqTGI1Ggaj178npB23nlq9svRbZl/TJQTeugmwAczeOqRPj1dFsVlVHKINP9lzPxp+l94 g/aUecp+hqyQgkuXm4pvmXrhJW9aRrllegbq6fGoVL1s+yoEmKJF/Fnm1jlifQyEmiRpT/m9Vof QgstEVMidD10lmoqKgOK5DRHZUBzf4Fa6vDzqqJDkZ/HfxYj/AgD+kJM0lC/GNBUZF8AEaEBRqd EF8ZV0OD7hJNH03lH+L0lVNIcV7tzkm43sN0INSfaj2oDa9ojNSI/+YTUlIZCgNBzEVMwN0qQvt OFDd18/UI= X-Received: by 2002:a17:902:e784:b0:2a0:c58b:ed6 with SMTP id d9443c01a7336-2a599e347d0mr61989615ad.29.1768476239321; Thu, 15 Jan 2026 03:23:59 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.23.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:23:58 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v10 06/12] bpf,x86: introduce emit_store_stack_imm64() for trampoline Date: Thu, 15 Jan 2026 19:22:40 +0800 Message-ID: <20260115112246.221082-7-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce the helper emit_store_stack_imm64(), which is used to store a imm64 to the stack with the help of a register. Signed-off-by: Menglong Dong --- v10: - add the "reg" to the function arguments of emit_store_stack_imm64() - use the positive offset in emit_store_stack_imm64() - remove some unnecessary comment, as we already have proper comment in emit_store_stack_imm64() v9: - rename emit_st_r0_imm64() to emit_store_stack_imm64() --- arch/x86/net/bpf_jit_comp.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index e3b1c4b1d550..2f31331955b5 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -1300,6 +1300,16 @@ static void emit_st_r12(u8 **pprog, u32 size, u32 ds= t_reg, int off, int imm) emit_st_index(pprog, size, dst_reg, X86_REG_R12, off, imm); } =20 +static void emit_store_stack_imm64(u8 **pprog, int reg, int stack_off, u64= imm64) +{ + /* + * mov reg, imm64 + * mov QWORD PTR [rbp + stack_off], reg + */ + emit_mov_imm64(pprog, reg, imm64 >> 32, (u32) imm64); + emit_stx(pprog, BPF_DW, BPF_REG_FP, reg, stack_off); +} + static int emit_atomic_rmw(u8 **pprog, u32 atomic_op, u32 dst_reg, u32 src_reg, s16 off, u8 bpf_size) { @@ -3348,20 +3358,12 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, void *rw_im /* mov QWORD PTR [rbp - rbx_off], rbx */ emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_6, -rbx_off); =20 - /* Store number of argument registers of the traced function: - * mov rax, nr_regs - * mov QWORD PTR [rbp - nregs_off], rax - */ - emit_mov_imm64(&prog, BPF_REG_0, 0, (u32) nr_regs); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -nregs_off); + /* Store number of argument registers of the traced function */ + emit_store_stack_imm64(&prog, BPF_REG_0, -nregs_off, nr_regs); =20 if (flags & BPF_TRAMP_F_IP_ARG) { - /* Store IP address of the traced function: - * movabsq rax, func_addr - * mov QWORD PTR [rbp - ip_off], rax - */ - emit_mov_imm64(&prog, BPF_REG_0, (long) func_addr >> 32, (u32) (long) fu= nc_addr); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -ip_off); + /* Store IP address of the traced function */ + emit_store_stack_imm64(&prog, BPF_REG_0, -ip_off, (long)func_addr); } =20 save_args(m, &prog, regs_off, false, flags); --=20 2.52.0 From nobody Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 15E41376BDC for ; Thu, 15 Jan 2026 11:24:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476250; cv=none; b=W89pQs1fj9acoXMpJVusoC4j1KeBGQ2GaCCrtGnOwsM2e+PdaR7ruWFDMUuEE5EjTxISrGQj/JQlfjDkcxyjVpHzCq7KPx3xrNHdJN3IYOJRwoj4L3HkWt58QD39A5xwa+vRI6jEsri666mufUn6xIdpSVbSo6A3kQQN9aAaE10= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476250; c=relaxed/simple; bh=Itcaf26Y45P0JIbP0zCWsMUMv9fsLICqg21TFcfGwGM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OE1KZbjyBa1MuTm2g91F0motkqlsxjiKcJbHKxxK+W6qtK90wzSE6LJNMNKTG+hdh1JupmFKAkt/W9R7hGAwOSTV679M1jRNj9TyZmKaZkPIp+zIbal/qdTLwcW1cGUoMMZ5SCwHOsSUvcfGPf5Ad8czSbkUT4frKhbgZlEU/+Q= 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=YarNjgYy; arc=none smtp.client-ip=209.85.214.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YarNjgYy" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2a0a33d0585so5471835ad.1 for ; Thu, 15 Jan 2026 03:24:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476248; x=1769081048; 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=rqPghPT79kN2ifffYdZv2FAk43D0a28aw/1itsDYUg8=; b=YarNjgYy9gYoOzf/Gy7bXnIz6UNgCYHbsXX0Nhgp9kDcCwFLHpBQFBQy8v/I2XlDjS AtbPJvoQKkYXaVvxd/toQslKS7XorFJVkfKcLqYU1m20evWYwZMvZfmLIwKp55LlD4Ub yrdoUubicx+HhM2ltUE9oTraThQDf4xu6e/UBL2oU6KOSj391e6O2dlHRh/Dpa96caB8 gDuBNd4ZxFk35OzCXhTgAP0weEjElVT4FiL+bWapUW97pI1JctvFpPQZXkxQgprfwnL5 Z5umWvypJ65pUZXGtD36DWy9FACkl5IRAgRhJCms70JIUCRGOwSrL108qBr9pwAmXgFv X0rA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476248; x=1769081048; 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=rqPghPT79kN2ifffYdZv2FAk43D0a28aw/1itsDYUg8=; b=nL5XGlDvsVw0rwmB6t4o5bnUIKAUG3Acz5oV/T1zF5AFaGM6dGXm5bKa+XWmkyfoLP c+0G6Xgmu1URjNUZH5mtY/E+faJhGhf0K2i5y+p4JP7+2zEPdPjeJ5t7ZZaxqGv3/+qV ydOsphKLWud2+a5/aOqiEhJygSNiSnUsYEAx6NZuYrFiZBSYF9mAw5blEKXGpDT7XMCb k9hNZntMVdV0VJlxO+WavKWm0oPWyU8jHH4IiDfJzKPVhy3qJrnuNbmZ9WGqTKbAzD4y B2RIJrxHZnAN+FpnJGc6X8MdFVDd/nfRp8Oux/dhmE2ffQ+TiftU8lwl8xeyJcaZ2omD Cyiw== X-Forwarded-Encrypted: i=1; AJvYcCWMcbVi9J3d7YQobYMSjfKHXDRA8CWutBnP4wdVU7UzmvkRoR/8I9RDfp01hPYW+Xa4bmzVeBCUOLXWX90=@vger.kernel.org X-Gm-Message-State: AOJu0YyZ1tzSx+qIQgFkiBuv8moprRc5PioslnLKW6MPyFIg/WRhEKw0 Ez976+vYLjTQLoLulo4v7ZIUazL8BxW99V6t7ynRsBgr5cfCSFfJXfPF X-Gm-Gg: AY/fxX4Dj5xH12T52nQzP5LCEDgdJNkwWgcTzqdEwYu+zF/LZGdb1TSyO4P5deazlGd pskfDx6YCuFcX9r7NCG+8TNmK80XFGx9xkmBSzRhl+uIUmDNznzvosq6jK82zCgUyytODUgOrDi NPIdAXX8vmTlRDEm0T7m+4ImdjMK9I3qVAToYrxrSJkV4hbzCKb9xEMZQcD18REZ81B7M8cnS7M DyFuIqmwPpib/0/Brt7LGfN8/6cDT1A8WVzkW8gFm9MBP2gUBHhE6HfllVTB+yKuvLEYtohmjZt tF3XNtaQMxvHOv+JCZCiRBvgPwGLwnyYSYPbznzHLsVFbhH1DaRonyOitWKkNyMxc1F95sGudWP GSbK9oPRPqHLDcfu/3sfTofPYediINop2MHKq9UHk8k2QTW7x5l/LfFR8oOzpFDaFHTcu3NF6mH 36l+s0368= X-Received: by 2002:a17:903:283:b0:29e:e925:1abf with SMTP id d9443c01a7336-2a599e4f274mr56245905ad.43.1768476248463; Thu, 15 Jan 2026 03:24:08 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.23.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:24:08 -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 v10 07/12] bpf,x86: add fsession support for x86_64 Date: Thu, 15 Jan 2026 19:22:41 +0800 Message-ID: <20260115112246.221082-8-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add BPF_TRACE_FSESSION supporting to x86_64, including: 1. clear the return value in the stack before fentry to make the fentry of the fsession can only get 0 with bpf_get_func_ret(). 2. clear all the session cookies' value in the stack. 2. store the index of the cookie to ctx[-1] before the calling to fsession 3. store the "is_return" flag to ctx[-1] before the calling to fexit of the fsession. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v10: - use "|" for func_meta instead of "+" - pass the "func_meta_off" to invoke_bpf() explicitly, instead of computing it with "stack_size + 8" - pass the "cookie_off" to invoke_bpf() instead of computing the current cookie index with "func_meta" v5: - add the variable "func_meta" - define cookie_off in a new line v4: - some adjustment to the 1st patch, such as we get the fsession prog from fentry and fexit hlist - remove the supporting of skipping fexit with fentry return non-zero v2: - add session cookie support - add the session stuff after return value, instead of before nr_args --- arch/x86/net/bpf_jit_comp.c | 52 ++++++++++++++++++++++++++++--------- 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index 2f31331955b5..16720f2be16c 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -3094,13 +3094,19 @@ static int emit_cond_near_jump(u8 **pprog, void *fu= nc, void *ip, u8 jmp_cond) =20 static int invoke_bpf(const struct btf_func_model *m, u8 **pprog, struct bpf_tramp_links *tl, int stack_size, - int run_ctx_off, bool save_ret, - void *image, void *rw_image) + int run_ctx_off, int func_meta_off, bool save_ret, + void *image, void *rw_image, u64 func_meta, + int cookie_off) { - int i; + int i, cur_cookie =3D (cookie_off - stack_size) / 8; u8 *prog =3D *pprog; =20 for (i =3D 0; i < tl->nr_links; i++) { + if (tl->links[i]->link.prog->call_session_cookie) { + emit_store_stack_imm64(&prog, BPF_REG_0, -func_meta_off, + func_meta | (cur_cookie << BPF_TRAMP_SHIFT_COOKIE)); + cur_cookie--; + } if (invoke_bpf_prog(m, &prog, tl->links[i], stack_size, run_ctx_off, save_ret, image, rw_image)) return -EINVAL; @@ -3218,12 +3224,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, void *rw_im void *func_addr) { int i, ret, nr_regs =3D m->nr_args, stack_size =3D 0; - int regs_off, nregs_off, ip_off, run_ctx_off, arg_stack_off, rbx_off; + int regs_off, func_meta_off, ip_off, run_ctx_off, arg_stack_off, rbx_off; struct bpf_tramp_links *fentry =3D &tlinks[BPF_TRAMP_FENTRY]; struct bpf_tramp_links *fexit =3D &tlinks[BPF_TRAMP_FEXIT]; struct bpf_tramp_links *fmod_ret =3D &tlinks[BPF_TRAMP_MODIFY_RETURN]; void *orig_call =3D func_addr; + int cookie_off, cookie_cnt; u8 **branches =3D NULL; + u64 func_meta; u8 *prog; bool save_ret; =20 @@ -3259,7 +3267,7 @@ static int __arch_prepare_bpf_trampoline(struct bpf_t= ramp_image *im, void *rw_im * [ ... ] * RBP - regs_off [ reg_arg1 ] program's ctx pointer * - * RBP - nregs_off [ regs count ] always + * RBP - func_meta_off [ regs count, etc ] always * * RBP - ip_off [ traced function ] BPF_TRAMP_F_IP_ARG flag * @@ -3282,15 +3290,20 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, void *rw_im stack_size +=3D nr_regs * 8; regs_off =3D stack_size; =20 - /* regs count */ + /* function matedata, such as regs count */ stack_size +=3D 8; - nregs_off =3D stack_size; + func_meta_off =3D stack_size; =20 if (flags & BPF_TRAMP_F_IP_ARG) stack_size +=3D 8; /* room for IP address argument */ =20 ip_off =3D stack_size; =20 + cookie_cnt =3D bpf_fsession_cookie_cnt(tlinks); + /* room for session cookies */ + stack_size +=3D cookie_cnt * 8; + cookie_off =3D stack_size; + stack_size +=3D 8; rbx_off =3D stack_size; =20 @@ -3358,8 +3371,9 @@ static int __arch_prepare_bpf_trampoline(struct bpf_t= ramp_image *im, void *rw_im /* mov QWORD PTR [rbp - rbx_off], rbx */ emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_6, -rbx_off); =20 + func_meta =3D nr_regs; /* Store number of argument registers of the traced function */ - emit_store_stack_imm64(&prog, BPF_REG_0, -nregs_off, nr_regs); + emit_store_stack_imm64(&prog, BPF_REG_0, -func_meta_off, func_meta); =20 if (flags & BPF_TRAMP_F_IP_ARG) { /* Store IP address of the traced function */ @@ -3378,9 +3392,18 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im } } =20 + if (bpf_fsession_cnt(tlinks)) { + /* clear all the session cookies' value */ + for (int i =3D 0; i < cookie_cnt; i++) + emit_store_stack_imm64(&prog, BPF_REG_0, -cookie_off + 8 * i, 0); + /* clear the return value to make sure fentry always get 0 */ + emit_store_stack_imm64(&prog, BPF_REG_0, -8, 0); + } + if (fentry->nr_links) { - if (invoke_bpf(m, &prog, fentry, regs_off, run_ctx_off, - flags & BPF_TRAMP_F_RET_FENTRY_RET, image, rw_image)) + if (invoke_bpf(m, &prog, fentry, regs_off, run_ctx_off, func_meta_off, + flags & BPF_TRAMP_F_RET_FENTRY_RET, image, rw_image, + func_meta, cookie_off)) return -EINVAL; } =20 @@ -3440,9 +3463,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im } } =20 + /* set the "is_return" flag for fsession */ + func_meta |=3D (1ULL << BPF_TRAMP_SHIFT_IS_RETURN); + if (bpf_fsession_cnt(tlinks)) + emit_store_stack_imm64(&prog, BPF_REG_0, -func_meta_off, func_meta); + if (fexit->nr_links) { - if (invoke_bpf(m, &prog, fexit, regs_off, run_ctx_off, - false, image, rw_image)) { + if (invoke_bpf(m, &prog, fexit, regs_off, run_ctx_off, func_meta_off, + false, image, rw_image, func_meta, cookie_off)) { ret =3D -EINVAL; goto cleanup; } --=20 2.52.0 From nobody Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 813033793C7 for ; Thu, 15 Jan 2026 11:24:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476258; cv=none; b=ILjD6GoQ38W3sG8dqvsSXXjRflp7pzRjWCFroVXtFv7FIcjRJz/cx+z0rA60dumVd8muYMWdOB8idA3kxwvaGv6ar63m9qzWGdq6CRdsxop+TBJ2hLsOu4/Z4Zpi0EC+dsqtR70kIegN1b2NaGVeaK75hQAXfekisPHebtZIHGs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476258; c=relaxed/simple; bh=7cC1ms5ub9SS0bly7QzzdjNJghADRqDQHVSuwXZiOkM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ALOkPbib7L7KgXlIDMrssYZ1GwN7DXLp7WAwn+5n1vC45Fad9THqgJXGzQVnnNf/keI7mzaB4JT5nUrvhRFQvKoHtKtAKny0dm94JPhovonvW77riPqHY3AgNkowFHLwR6faaoWmjFZyaZ/MJeXTyyUoBDLuHHwMfOHZy37dyPk= 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=G4W+VmxJ; arc=none smtp.client-ip=209.85.214.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="G4W+VmxJ" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2a09d981507so5048975ad.1 for ; Thu, 15 Jan 2026 03:24:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476257; x=1769081057; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TG3OIJ4OsXGkuiYroAWEp+caX5ZqVGcvi7JJxvZjj6c=; b=G4W+VmxJB5qmyn2oawBZOediBCjOkWfHjPUYr6Zd+GFu//t684gklaKkqRWkqBjR4p 0yHF1cKBtWcegQl//WINzgjGbrdSX13sGfNTc9vMFMWiYCCYviPgkAVML4wlcKSYbt9l YAIxGkCCuJlW4+gpWMiOA44rNmphZ6Ch7U/ehvGJu85vGtFMTWeXaiK62Dpv9EW2Ahyc +sIlU9b22YEmprLAP4Fyi2uhd+O3pD4eIqWiYsmdpUyvxQoPfrK1LzO5T3XFGzfrAMf9 qOuyMdK5bPb/NjAtwmSyOFP1JnLHnuCpE7NawLIqwF7CLj9EeYbpcKVgUqDmoBj04lhz HPRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476257; x=1769081057; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=TG3OIJ4OsXGkuiYroAWEp+caX5ZqVGcvi7JJxvZjj6c=; b=fKkCBb64r5bpl3hzLvW6yc5REybsMa9np1srvSv/3V4GrBCA7OdeiYYOx/JB9tWwpW +NrR0kGQPveJje9a4hWmGrn/9IP/q0NtaJAFYf80yBZpXEYqXbPtLHsc/1IDaC5z0aYu FRSf+WANgcJLsnwJ8R6RtShApb9YlzWXIsSi73xjuHbXPAMfXq0s5I4bJxNcL7NHifLq locJqlr+azH/7n7ZpphCUNt+MXs3wCx7b/yzTbmEDB88YVmSM5mjaX9PlqzF6d7ZTc/W ARYe5Ll2G6TIQIeqtcHEdP/zdWbh54ESd4l2lWFe+x5EgzKRxI+KhzzL6YMLZC3ycI4y G3Kw== X-Forwarded-Encrypted: i=1; AJvYcCWF0ZrZ/sfq1jeYMON99bmx4FJR9URwrR3vRnJon7w6U42NipUNxNfZib9yPloMJdBfLphns4ol7MM6qo8=@vger.kernel.org X-Gm-Message-State: AOJu0YweQqUlbmkX/KzwAO1b7kMH812CDIDJT2wvz+5QJY0p44ppk1rJ oWgaLCg3+oepo3fOJbsrMXs+bs9IueBzSnYW1SMzdvRvzipdkOSJl6Y5 X-Gm-Gg: AY/fxX4mZy5cU5J87sDgxVmy6GWAa29nwIcOTuvzT6i+MP+Zx7nQN65CEQzcJqgiba8 36y9tuLGpp9X/Pq+pW5tJNGPn+6Wpr+gjT0qBJpIB+XOOdCu9V54zdjtbjRueHvuMBH7EIdWh7y i5rzqQsjLyL/DCVCqetja+HZc+GxewDjIo/1sBwfHA13IRCfXUMHXhRp9a9E5y2LjpG6dCCyhsz a+e/PgzSH8drsS8/L9UzWgOK8P0J2nuyG/vlXL0s24nhX9c48YngAfyLrsa9FMfohlLMRkY5054 4y7AuSIlThphRbFJrItMsnQ3NqOKlN0jdYIFAeT8mSDx+tL9KY/j9r7YnNcbOtiKZznuLT07X3g f/9ssgrtjQ7JH3b5BGHEUV70QT3Vu9sHmNZAN/8nRoX3f0/mnGHKuezFPkQ+3YyIfLJZNiBfP8b 64Lwee858= X-Received: by 2002:a17:903:1967:b0:298:45e5:54a4 with SMTP id d9443c01a7336-2a70098a018mr25525385ad.1.1768476256907; Thu, 15 Jan 2026 03:24:16 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.24.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:24: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 v10 08/12] libbpf: add fsession support Date: Thu, 15 Jan 2026 19:22:42 +0800 Message-ID: <20260115112246.221082-9-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add BPF_TRACE_FSESSION to libbpf. Signed-off-by: Menglong Dong --- v10: - split the modification to bpftool to a separate patch v5: - remove the handling of BPF_TRACE_SESSION in legacy fallback path for BPF_RAW_TRACEPOINT_OPEN - use fsession terminology consistently --- tools/lib/bpf/bpf.c | 1 + tools/lib/bpf/libbpf.c | 3 +++ 2 files changed, 4 insertions(+) diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index 21b57a629916..5846de364209 100644 --- a/tools/lib/bpf/bpf.c +++ b/tools/lib/bpf/bpf.c @@ -794,6 +794,7 @@ int bpf_link_create(int prog_fd, int target_fd, case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: case BPF_MODIFY_RETURN: + case BPF_TRACE_FSESSION: case BPF_LSM_MAC: attr.link_create.tracing.cookie =3D OPTS_GET(opts, tracing.cookie, 0); if (!OPTS_ZEROED(opts, tracing)) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index bbcfd72b07d5..0c8bf0b5cce4 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c @@ -115,6 +115,7 @@ static const char * const attach_type_name[] =3D { [BPF_TRACE_FENTRY] =3D "trace_fentry", [BPF_TRACE_FEXIT] =3D "trace_fexit", [BPF_MODIFY_RETURN] =3D "modify_return", + [BPF_TRACE_FSESSION] =3D "trace_fsession", [BPF_LSM_MAC] =3D "lsm_mac", [BPF_LSM_CGROUP] =3D "lsm_cgroup", [BPF_SK_LOOKUP] =3D "sk_lookup", @@ -9859,6 +9860,8 @@ static const struct bpf_sec_def section_defs[] =3D { SEC_DEF("fentry.s+", TRACING, BPF_TRACE_FENTRY, SEC_ATTACH_BTF | SEC_SLE= EPABLE, attach_trace), SEC_DEF("fmod_ret.s+", TRACING, BPF_MODIFY_RETURN, SEC_ATTACH_BTF | SEC_= SLEEPABLE, attach_trace), SEC_DEF("fexit.s+", TRACING, BPF_TRACE_FEXIT, SEC_ATTACH_BTF | SEC_SLEEP= ABLE, attach_trace), + SEC_DEF("fsession+", TRACING, BPF_TRACE_FSESSION, SEC_ATTACH_BTF, attach= _trace), + SEC_DEF("fsession.s+", TRACING, BPF_TRACE_FSESSION, SEC_ATTACH_BTF | SEC= _SLEEPABLE, attach_trace), SEC_DEF("freplace+", EXT, 0, SEC_ATTACH_BTF, attach_trace), SEC_DEF("lsm+", LSM, BPF_LSM_MAC, SEC_ATTACH_BTF, attach_lsm), SEC_DEF("lsm.s+", LSM, BPF_LSM_MAC, SEC_ATTACH_BTF | SEC_SLEEPABLE, atta= ch_lsm), --=20 2.52.0 From nobody Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f193.google.com (mail-pl1-f193.google.com [209.85.214.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8F79378D92 for ; Thu, 15 Jan 2026 11:24:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476268; cv=none; b=lB/3aE7ENPFfzS1Uiao5MnXqDUTNJ/WiZusIW2vKxP0+Dve9G/Co6XwSU+wxVIj95tbwVTe5n0p/vkFWfKrTejxH72OaA5Hdu5uebbitmV/6rL27JGSmVW1s6kJ6YEVIpz2G4aomaJU1OrcJcwJmrEgTBsYUZIZR2IyCDjYGvbg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476268; c=relaxed/simple; bh=pPH6IGYSvT73W3XnsSk5F+V+bv692q4Zq0EDWpqk/mQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=R7x/PQyFzGpYXA3qMPvzfLEWacCGP2Tdl60G/eqa8/VKG8zbY9ZQ1oXGzjAmObDZKHQfcuyBdujRFG1ezVYQ7qp3hwqvWuSAbXCFHVZ4tXSppTGaZccg+hfPupDRsVcaEYE8bv6JiyeDrVnbF/wVe6Jbm1r+Xy8XlrB4lyI7ctg= 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=VquaUTE4; arc=none smtp.client-ip=209.85.214.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="VquaUTE4" Received: by mail-pl1-f193.google.com with SMTP id d9443c01a7336-2a0d0788adaso5282875ad.3 for ; Thu, 15 Jan 2026 03:24:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476266; x=1769081066; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BGHQu6mG6lMqPEadRM+ZfBOS3CsIq7QGGssQ90tpvv4=; b=VquaUTE47cNMtH4R99nUyNiRvm8ZKI7W4drvLXdZFG1L/XDQlnBCg0qvO7a2TkECck yyiA45+r1PBV5xDBt7YeSrMkItoYG9h3MnD5gLsmAeHsnPeWA86Zu+r8d19CECgfWPX4 1PPISCtSNMTFT+qgixpiEYCFD5tlWA0l+3QVPjdplGV8nyxZxZzxB1kJr4wP16vptClt /0N0dikQp438pYIsrDvYXpRfNlltek2QNilk3ecn4QAiA4f40CYJ4amotlr4CFAcZ4nd xyQexb8MAWb7tCUCm7+twFzmpgI0osN6iRTz5ec1xuB4iekjbNGj8VLh0jB8hFLhr1j5 ACBg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476266; x=1769081066; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=BGHQu6mG6lMqPEadRM+ZfBOS3CsIq7QGGssQ90tpvv4=; b=gZjB5d0yhwqLZTfo++4LIMdCHNC+jCQrPcffcvGyGZhr6VGmnlISkOjMoUrYaeIx1y qrquRVXT7YMvaXtlr55wPusH76uxwVkBFgccl/VlyMeQeK1y0PuZ+KI7hwAPaSeCq2BM mz/Vjhom8gw7bCval2EC3NWPUpJ7UcYSmN0idop3Lpz7ol+8EC967j1cLcoBfDejEUGz 3mB9nf/9Crk45UaCoKLj5aMZ37W4vXl0Xu0ccuWy7yrmlevGMQM6Oflp7KaG7ETVqKQ0 W2Ymr4+xY/eSueuKg6w+AN0NBSYPZKbNmgknIRz2B1x8Jm6Ef3hxQjgG2S6XUi/zuE9u 9rOA== X-Forwarded-Encrypted: i=1; AJvYcCXoL/783a2j++OqJbUCX+yXcN93ScL05zQtrTBzZfd89bioCpKgBwkTG1lJ0solVlJ1IpkikJeU7zO4veg=@vger.kernel.org X-Gm-Message-State: AOJu0YxxoK3UrCnfQqnziLdWHsrPwcV53XWyZPqS2Sh98BQawa4iqi/C ZbIhPqrIyBkJ94ojYl6PZsRJDIBBrbf6UmFI4vbacWix2NsXNreSuQoP X-Gm-Gg: AY/fxX60h4dVTSp5bH5aYKmw2se1qWtjX+717QHzrtRagun+7j33BmBAuLrURrKeTGM rYaVoscOEregNtXSOQdbR2FFobunaTYSKwb5PbXheasinvZaYZe3fmAJKiNy8Yk1dHgiR2Q1PbC 9TdM4MBgFOJldvi0FL8+0cJUEhUWIaEiirY5i46dgF0TV8J8l5CZgx1+kAssg1BdQcNSAdLzQ3t 8m22yxSVMCAly6zkvkijSUd1WtLj0WzfNrONoSCY+2y+qynUI8t+f8F61vskWIO5OCG0KLe3Jfr A7/Bj/ZLT/HplsE0vSDKffrVMwlRAC0hJassf0GCIx0UfcnyXQqlHVflqCtE+tzVfexqjyiHuaB xgcC7zfeZro5LOt5to60u0Jz+H8mv3iH14Ksyk3A3UpwlYqxdZJWUetK6mog8sXBml8dPubgS6/ sRj2tpBw4= X-Received: by 2002:a17:903:1585:b0:2a0:9b4f:5ebd with SMTP id d9443c01a7336-2a599da5d92mr57640525ad.15.1768476266136; Thu, 15 Jan 2026 03:24:26 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.24.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:24:25 -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 v10 09/12] bpftool: add fsession support Date: Thu, 15 Jan 2026 19:22:43 +0800 Message-ID: <20260115112246.221082-10-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add BPF_TRACE_FSESSION to bpftool. Signed-off-by: Menglong Dong --- tools/bpf/bpftool/common.c | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c index e8daf963ecef..8bfcff9e2f63 100644 --- a/tools/bpf/bpftool/common.c +++ b/tools/bpf/bpftool/common.c @@ -1191,6 +1191,7 @@ const char *bpf_attach_type_input_str(enum bpf_attach= _type t) case BPF_TRACE_FENTRY: return "fentry"; case BPF_TRACE_FEXIT: return "fexit"; case BPF_MODIFY_RETURN: return "mod_ret"; + case BPF_TRACE_FSESSION: return "fsession"; case BPF_SK_REUSEPORT_SELECT: return "sk_skb_reuseport_select"; case BPF_SK_REUSEPORT_SELECT_OR_MIGRATE: return "sk_skb_reuseport_select_= or_migrate"; default: return libbpf_bpf_attach_type_str(t); --=20 2.52.0 From nobody Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f196.google.com (mail-pl1-f196.google.com [209.85.214.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 434C43793B9 for ; Thu, 15 Jan 2026 11:24:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476277; cv=none; b=DEcbtMQgW5QkS0Nkqlb6dqpP8sDL/gWeawA5ZKul8cVvn8Yl7pFXVb4J4jLQvIaB0AMoQWVQHUTT9M9HTsxjetroUSQgMVwaHhvKTyrBIrRskZ2SIzpy+q/dhQ/C+7tnB1pgu5VRfZ1T6NDpAO9DqTUtt2yL8UWs0Z2oqnoWmgw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476277; c=relaxed/simple; bh=tNyw0RMF3OxHkN5cM2BejvwuZpXkAcKTmu7JJGqwwVg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JflRDlt5A1cT/v2TZ7B/GtGYmNowJvQhxZmS32R14d2p5aDIEexArDvCD0+r0pN/7+N/wiRkpcG/spN2/iT7oAuhdAZXWIuqFtXHhCBLbXx3wd0tgfEVIWZs1K7rP+ukXqR632LOnGukFDBC9R94LKe4JhnK83B1VGXnbz2jQPM= 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=cN+GTzai; arc=none smtp.client-ip=209.85.214.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="cN+GTzai" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2a0f3f74587so5567575ad.2 for ; Thu, 15 Jan 2026 03:24:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476275; x=1769081075; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=tlyqjJg45w/WwCBTFkaauQNGPumY1lkyqYrB1pbejjE=; b=cN+GTzaiLM42FIhv18Ppi9PPUlZ3eM8QPPzHKNWJ33RMlOD53zfdRFLmEIfUFYhv5V qeWHbWsk5HP3awH7fn4kGSeficnGxVHFIz34k2GWOn5k4JqxUw+Oae7vbmbBEYZymecE nYZ6tZr9gkNTPOcX+v7pAM0ewVYtlt+bIydEABkcDCVajEQ2zb6VnGsZB0JdSMwsrZch 4wKlCyaeGD9dQGNHrZ2BZx1n91yQOmtaRjUdEYBTvRAViLclGgcriL+muAdKAyaZmnU1 WgHnQLx+eq43gqQ9cFDhQU5YSJFdgwJ5DVdbIEFKXAV9sQLIqxJ7bbptBTDf1YMyH17S fIqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476275; x=1769081075; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=tlyqjJg45w/WwCBTFkaauQNGPumY1lkyqYrB1pbejjE=; b=qfVt3pdPVzv5Kom64o6v9idhacZy20bjeUcv2aNy1jJkMzamkyPE3t2ahwuAO1pUDA 9/5n/9/IU5+N+qfCP/f7ukgiSjcmHL3F2GoShV9EGuwoeKwBiVyWZ7A9bmmb1EtMPPBw tEABNVwxQeoZVKJEY7WWFFG/jON9Lhn7P5bls+9LiR0tFUUKdgsTDyoEM1/aqWJleJFW ZvyLjq9EFCQYuuwKlnGdPvjrQoetL1ZFS4KcH6XmED50sgsPM+FSgSwMdSX93kZxeJxP 0jxyudP1fdVgnC0AcFdeN0vsck4GgR4HY0/156AFcROnUepH7QKyMRjx8EnvXjiHlUmn WrxA== X-Forwarded-Encrypted: i=1; AJvYcCWbtU/e2Z9U7ayCl87InkxXOET69Kq2YdtE5ctwuIbedOuGpSrD81wfCl2W7LSuZ1ypGtjEw1PX6dRd6Dk=@vger.kernel.org X-Gm-Message-State: AOJu0YzUNQaPecgZ8bmL4yxO5Sg0W5Wz5M0bZSXqxzX5/eM8nn+UGVMq ZB9Wc7y6+ZPJ9EaQMHL6moucCjFgvdfWfdR6OyTAJRRfT/D3vFx39X57 X-Gm-Gg: AY/fxX4g5i9A3Z7VADWIT46ShXEEKVq3lG8sFkVa1d2XXggg372pUp0+9m+8gz72JiS uuaaaI4GeNnqcaxgvkffarbhptSDHlnp7R9Ew0wUW9AqHJpstEGXOFF/4F69EKuVz1HCelwkYml te1sQrGbWcIxNdnNljpCt+gXVbBGHzFY/IgXwhfbT3Ly7W2Wqr/OTOmXR+v8u6IkqI/QVAynGhL p/RUoxYtFrSUFRApa6t2Ja+VuRm7U5SY3fJwI/14I3aHQ2eK9VrwLcF8TdxazIIwTaDWIFuFjsl Z4X3yK6GmVX32k9COiDDtIdVO0KAohGQC0JLfJBx/Y+GuEBBfmoQ7kGrDXh/jjf+QWyI8qKxmWI 0EMYtGf3ycCgyezwCd+4Tqc+DCsx8PQwlTeoNxuutyySN5naTbxSSywW0/VMyWsAcBwAU7DUShA EE2TQ6BO9IPvAV0KODlQ== X-Received: by 2002:a17:903:2289:b0:2a0:e80e:b118 with SMTP id d9443c01a7336-2a599da82edmr62777645ad.7.1768476275385; Thu, 15 Jan 2026 03:24:35 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.24.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:24:34 -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 v10 10/12] selftests/bpf: add testcases for fsession Date: Thu, 15 Jan 2026 19:22:44 +0800 Message-ID: <20260115112246.221082-11-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add testcases for BPF_TRACE_FSESSION. The function arguments and return value are tested both in the entry and exit. And the kfunc bpf_session_is_ret() is also tested. As the layout of the stack changed for fsession, so we also test bpf_get_func_ip() for it. Signed-off-by: Menglong Dong --- v3: - restructure the testcase by combine the testcases for session cookie and get_func_ip into one patch --- .../selftests/bpf/prog_tests/fsession_test.c | 90 ++++++++++++++ .../selftests/bpf/progs/fsession_test.c | 110 ++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 tools/testing/selftests/bpf/prog_tests/fsession_test.c create mode 100644 tools/testing/selftests/bpf/progs/fsession_test.c diff --git a/tools/testing/selftests/bpf/prog_tests/fsession_test.c b/tools= /testing/selftests/bpf/prog_tests/fsession_test.c new file mode 100644 index 000000000000..75bb42942b67 --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/fsession_test.c @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2025 ChinaTelecom */ +#include +#include "fsession_test.skel.h" + +static int check_result(struct fsession_test *skel) +{ + LIBBPF_OPTS(bpf_test_run_opts, topts); + int err, prog_fd; + + /* Trigger test function calls */ + prog_fd =3D bpf_program__fd(skel->progs.test1); + err =3D bpf_prog_test_run_opts(prog_fd, &topts); + if (!ASSERT_OK(err, "test_run_opts err")) + return err; + if (!ASSERT_OK(topts.retval, "test_run_opts retval")) + return topts.retval; + + for (int i =3D 0; i < sizeof(*skel->bss) / sizeof(__u64); i++) { + if (!ASSERT_EQ(((__u64 *)skel->bss)[i], 1, "test_result")) + return -EINVAL; + } + + return 0; +} + +static void test_fsession_basic(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open_and_load(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open_and_load")) + goto cleanup; + + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_attach")) + goto cleanup; + + check_result(skel); +cleanup: + fsession_test__destroy(skel); +} + +static void test_fsession_reattach(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open_and_load(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open_and_load")) + goto cleanup; + + /* first attach */ + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_first_attach")) + goto cleanup; + + if (check_result(skel)) + goto cleanup; + + /* detach */ + fsession_test__detach(skel); + + /* reset counters */ + memset(skel->bss, 0, sizeof(*skel->bss)); + + /* second attach */ + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_second_attach")) + goto cleanup; + + if (check_result(skel)) + goto cleanup; + +cleanup: + fsession_test__destroy(skel); +} + +void test_fsession_test(void) +{ +#if !defined(__x86_64__) + test__skip(); + return; +#endif + if (test__start_subtest("fsession_test")) + test_fsession_basic(); + if (test__start_subtest("fsession_reattach")) + test_fsession_reattach(); +} diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c new file mode 100644 index 000000000000..f504984d42f2 --- /dev/null +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -0,0 +1,110 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2025 ChinaTelecom */ +#include +#include +#include + +char _license[] SEC("license") =3D "GPL"; + +__u64 test1_entry_result =3D 0; +__u64 test1_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test1, int a, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test1_entry_result =3D a =3D=3D 1 && ret =3D=3D 0; + return 0; + } + + test1_exit_result =3D a =3D=3D 1 && ret =3D=3D 2; + return 0; +} + +__u64 test2_entry_result =3D 0; +__u64 test2_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test3") +int BPF_PROG(test2, char a, int b, __u64 c, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test2_entry_result =3D a =3D=3D 4 && b =3D=3D 5 && c =3D=3D 6 && ret =3D= =3D 0; + return 0; + } + + test2_exit_result =3D a =3D=3D 4 && b =3D=3D 5 && c =3D=3D 6 && ret =3D= =3D 15; + return 0; +} + +__u64 test3_entry_result =3D 0; +__u64 test3_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test4") +int BPF_PROG(test3, void *a, char b, int c, __u64 d, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test3_entry_result =3D a =3D=3D (void *)7 && b =3D=3D 8 && c =3D=3D 9 &&= d =3D=3D 10 && ret =3D=3D 0; + return 0; + } + + test3_exit_result =3D a =3D=3D (void *)7 && b =3D=3D 8 && c =3D=3D 9 && d= =3D=3D 10 && ret =3D=3D 34; + return 0; +} + +__u64 test4_entry_result =3D 0; +__u64 test4_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test5") +int BPF_PROG(test4, __u64 a, void *b, short c, int d, __u64 e, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + test4_entry_result =3D a =3D=3D 11 && b =3D=3D (void *)12 && c =3D=3D 13= && d =3D=3D 14 && + e =3D=3D 15 && ret =3D=3D 0; + return 0; + } + + test4_exit_result =3D a =3D=3D 11 && b =3D=3D (void *)12 && c =3D=3D 13 &= & d =3D=3D 14 && + e =3D=3D 15 && ret =3D=3D 65; + return 0; +} + +__u64 test5_entry_result =3D 0; +__u64 test5_exit_result =3D 0; + +SEC("fsession/bpf_fentry_test7") +int BPF_PROG(test5, struct bpf_fentry_test_t *arg, int ret) +{ + bool is_exit =3D bpf_session_is_return(ctx); + + if (!is_exit) { + if (!arg) + test5_entry_result =3D ret =3D=3D 0; + return 0; + } + + if (!arg) + test5_exit_result =3D 1; + return 0; +} + +__u64 test6_entry_result =3D 0; +__u64 test6_exit_result =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test6, int a) +{ + __u64 addr =3D bpf_get_func_ip(ctx); + + if (bpf_session_is_return(ctx)) + test6_exit_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + else + test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + return 0; +} --=20 2.52.0 From nobody Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3B9783793DF for ; Thu, 15 Jan 2026 11:24:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476287; cv=none; b=uwGvr+/dymOVzXhvThImLwEPmk9aZic3d4UNj7QJV99VAg8WFdO0n76/N3pa4L0brJaSt+PSySWEZ4nqVZ9QG+NpBLJGAW6gIGK83ZVp2z4f5SrODReGjz9dqotHZUtS1eUfSd5tAFWis1RQk6z1eqzCC/3Geyp3PYb7eSzkzfY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476287; c=relaxed/simple; bh=NVrwW1R4O2KcdroQjpDDjfgCMa4Z0Adcw10s6u/XdoE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Agz7bKZnrLxb9vlmzUpUKZiBvpkbNMprar7rVDCK+HX7a7AS8jj9RLjdBa9pV0WcaVX/+83dOoK3kOqcAyUbhaLKJoJh9xYeLEqix3ycDmkSrBx97LbWTVUw1feaMeboKK/Bb6bDXprJ/m9YbNX9mbCIuluROCSiygZxJDz1lm0= 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=J+6Xl1OD; arc=none smtp.client-ip=209.85.214.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="J+6Xl1OD" Received: by mail-pl1-f194.google.com with SMTP id d9443c01a7336-2a2ea96930cso5009585ad.2 for ; Thu, 15 Jan 2026 03:24:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476285; x=1769081085; 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=meuxC1Q8dcQIhcuiosVy+dIDQYPWfjEU4DNbMnGdavk=; b=J+6Xl1ODcADdLDUQQOXpd4d+/OybE5dOU2KlxLqEpbKwiXu+iwMEMsNB91yu1VowMk x3DeZ5upecmeGzQbrjUbJrb/ZAqNCTlfqZ60suRJ1vif+IxncewQcTeINmGYF9YfllDO G9KLDQAUWAKcNJ+Nl9CGp9ardizZHQlguzmeTM6uVETn8WgcaUT7APnCY+Kt1YNiMcfd zKbmXBOALwbdKullSrBUE+E+z/fk61CUziwAo5Pim5gy/CJHZapIxlXW5clBz5NDsaQf KxOjXZrDkT3vV3NyvsBEyLz/QSGzLHwRck29XA2+5nN5lXYxYjnhQe9mBM+Urnh3Byi+ NZVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476285; x=1769081085; 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=meuxC1Q8dcQIhcuiosVy+dIDQYPWfjEU4DNbMnGdavk=; b=P5A+LBi6oXm/1Zp5Rz77slbKwiW5ECShr5mdhS7gvsl4ICp3zQ6i1wTgy6DN8Kzw9V zKPRaIY8rSZfVEZYAjP5LWKjjKrF+ZSFjXhSEYzJSltOHzmDPt7YhcUH3hAEQE9T8lPl 7rHw+EVBGlBf2YfXIwuIB1rRJeEmIDOswgVRe5vMvdNCGZ+/Jf6DJMSLgYiXIpFSeoGX bhkXx3YTVrPRTDcgsrlOES02yGnVkJfH5UWHxJ03OcBqV7pReJzRDdQ6mu8DHJxT3a+4 JetA34YvDbdwsH2GlaT9L+mGBcmfeTCB9Ufmbzmhn/cBuQHvFHyPmczsdV+UJtG0VhpA GQRw== X-Forwarded-Encrypted: i=1; AJvYcCU5uivjR1kk7XczOcudx6ukiu0U6Vrfch2VxUuM6OS3/TdP/JU6gjPsd/vBnXGNek+f6xWlEbevEyx+R5g=@vger.kernel.org X-Gm-Message-State: AOJu0YyLFwCjbEG1zkAz6Mw60B3w6b6oYkQL1V/ICWBX86MGSUpS9vvY 4WNei4VNhpSonA49LLDmvdgIev3uXLhIIQCJFasRrA/6bN3FIv8mSAYU X-Gm-Gg: AY/fxX5n4TJEFcGjD+gDnJ8QXBjvMm27So0lUimeI1tXHDKMnViJLEc4zp7KpdU4S1a hidZk2TfedfbZ3WUbrh+wVUJe6B7iB8aBA606r1dD3raZF/64xxtGdwxPvU28yJdRR560c/mYXR Fmndq1+mn+VVnY00NS52bWq0goICd9viyNGYGwu9ZVz4y/+r80DuT8Q2MulRrBTD3k7fLxJM50H aigO5jBnywEHRBFO6CzBlWI37PBFyHGf+nMWMA0ZkHO7ypeEH8CvjLJhisDiE2i7qdBxjahYyKQ FdkEHv7qYakjESLcUy4jVAE9xR3unYgRdKwqFR8HsvSmSxqtId6VHx30wt8YPJXs2JaZGBEo+cd TiXqkL5jgyPBBoP+uCpOCojZ3v9teSfwtBFJPxsB4Ez6ycIzuTLy0UPiRQK7TOk9DNnzgv+P8/M 2QdBiGnkMyN5eN6GSixg== X-Received: by 2002:a17:902:cf06:b0:298:3aa6:c03d with SMTP id d9443c01a7336-2a59bc61e10mr49463585ad.57.1768476285450; Thu, 15 Jan 2026 03:24:45 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.24.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:24:45 -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 v10 11/12] selftests/bpf: add testcases for fsession cookie Date: Thu, 15 Jan 2026 19:22:45 +0800 Message-ID: <20260115112246.221082-12-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-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/progs/fsession_test.c | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c index f504984d42f2..4e55ca67db46 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -108,3 +108,56 @@ int BPF_PROG(test6, int a) test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; return 0; } + +__u64 test7_entry_ok =3D 0; +__u64 test7_exit_ok =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test7, int a) +{ + __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; +} --=20 2.52.0 From nobody Mon Feb 9 00:42:05 2026 Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 372C03793AC for ; Thu, 15 Jan 2026 11:24:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.194 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476296; cv=none; b=rb39vWBgo126H99Ho2GZDWgH3DEUh3sXEi8Hpnh5uXz0jU/6O2H6V0FzQot2Ee0bpLfDgjb8zE6EkpA6fnzmUKjGAncKW3huXN0RjGIsTmuWHZ/1WA0+97SoEAkEAVS34dy3KKDkdKwzH2PVRRAVU6yaNvrt8p5+dGncqVguhuA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768476296; c=relaxed/simple; bh=cL25nkDUzKZag4J9iucviG36ODRXZz/OJhTfJnS3kJQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=N7Swca1qyAMDYqA9uvwnIyZUKMRC1fyDGTUv6j3xTnuqOxFM7Hp/gHXCqc3BEj19B3dZ6ZHaY17ppkniwt13S9B1IN05yuuIVNWG2kiTr4m9aeEbAPN4X4hKjrTzN7I2kz35W3f2LcbPIoU40GVwLExCg1fF2YtWeunjwH3Can4= 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=nQqSOEUo; arc=none smtp.client-ip=209.85.214.194 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nQqSOEUo" Received: by mail-pl1-f194.google.com with SMTP id d9443c01a7336-2a110548cdeso5742365ad.0 for ; Thu, 15 Jan 2026 03:24:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768476294; x=1769081094; 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=XYfLimlEod4L01lx+XYB7h0VUHpcPwya1tLXiZjahd0=; b=nQqSOEUo0UOxJiaWM/FLncotJa7v4vghPCNnDfKBxm7lEHJ5TSn+lziDLPsQWBuW8k pDY1h2XMHr6k5ozA1ICuc8bMARufuOP00v0jAZnenwlkXkfxpcIMezmvh2RPFH3BGzg2 FmfhmxvjJeU9idfz0QIcmz/Gn61sKKBQWq5Xpk/mb1Zd6DN4/l5qFtw7Udi4YMVJBN6R 9E92O3G+9+3puzzt1Y/PTh/GK07INuJ5K+BzhIqKK377Hq6WjWAHY6+LU0egOuwu3kfP bIC8L7eMAYxNJUvSIPmv7fi9XEJSt3Jh6SsqBG6BQSeG8Qa/lBkH+7ydWPUsIYNo+jWb mqrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768476295; x=1769081095; 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=XYfLimlEod4L01lx+XYB7h0VUHpcPwya1tLXiZjahd0=; b=kOpPLoj0N5DTP9u0x8g5QnCnGAvSOKc8YFhBrG6tsdQhz0dT1dFYURdlkE5w2+KhL+ skGhYPJ3dAV3oW7of7AMt5LDSCF6ZLbQ4D0tdFzP4IRD6DrXaff6GJHc7kf8qSwWwgt1 z5FIBMOixwP1ARMnngzl7spaTYeBjcmFqj2Ekn1XVG1KWSq4UlUDL08T2ZYWciE3p/0T Ex60S2ph7ZjU1ZAjvFLnX9Iphhz0Edd/F9w90JMw8EA9IsvAwb8J/Vblzk4t60UWFegp YxsU5H3d1qtIGgvBGOY5F/ap+Jxi6+MVmfMcAFiledQNccrSIKMQeQO5Ikv0ta89Psqk yXog== X-Forwarded-Encrypted: i=1; AJvYcCUydBcVG9PZkwQ22PesXtdn1Bv4+SdnfF6R376jol48PVDyTCKC5TeUwXuS/456EDVFE4K7vzfMph+0cvw=@vger.kernel.org X-Gm-Message-State: AOJu0Yx7uwAF8rlHKOPIUfzCmhXBIp3cPfxDwnqmKZgyoKV71oW+r6Yl E283n2ZW4TplkBqbVGyDFBBkLP9ndsnN804fbZzEZCkQNL/9Oh/dahcG X-Gm-Gg: AY/fxX62LMxE3YwnTQQHeVUImZZcoIZ+gglpWdRgkjAhHFesGXLrkrxNGFBXHldMNjI WklyWHc6mCJ9Pp7XinoqFwYilZdpYtIsoJLLYOY09+n2wtskTz7PnIKanGWGYHm+vaRz/j64OMN NT6WaqPJG1fGIzbbuCJHb4Vr96hoxndSYeg/YG6kXVB4q3sqFZMPnh7HiWiADkBYICwMBtSmoEF 4LxBkn9Nkj6PkppQNdRhPVFb+FowljABRvmFLklQUl06rne5QyIFfSaSRJ/I+DQXV9mdlNdHX/l dM1D3WoVY6cTnE2Dx5uPY2iaws+/gRTlZkL0BY/KG34c2qWQnbDaksqPeYPNr4eWcbZVuh5YkKi ZPmTBXLEUyRTMGl+WcehP2te4GnQiNLSuhIwc8qZgzBR2IXqPkdctiJEGknruBQWzh0SS7RJssb eKgiDyuGU= X-Received: by 2002:a17:903:2a90:b0:2a0:9970:13fd with SMTP id d9443c01a7336-2a599e493b5mr54268265ad.43.1768476294546; Thu, 15 Jan 2026 03:24:54 -0800 (PST) Received: from 7940hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-2a3e3ba03f9sm248523225ad.0.2026.01.15.03.24.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 15 Jan 2026 03:24:54 -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 v10 12/12] selftests/bpf: test fsession mixed with fentry and fexit Date: Thu, 15 Jan 2026 19:22:46 +0800 Message-ID: <20260115112246.221082-13-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115112246.221082-1-dongml2@chinatelecom.cn> References: <20260115112246.221082-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 4e55ca67db46..7f640ddc8905 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -161,3 +161,19 @@ int BPF_PROG(test9, int a, int ret) test9_exit_result =3D a =3D=3D 1 && ret =3D=3D 2 && *cookie =3D=3D 0x1234= 56ULL; return 0; } + +__u64 test10_result =3D 0; +SEC("fexit/bpf_fentry_test1") +int BPF_PROG(test10, int a, int ret) +{ + test10_result =3D a =3D=3D 1 && ret =3D=3D 2; + return 0; +} + +__u64 test11_result =3D 0; +SEC("fentry/bpf_fentry_test1") +int BPF_PROG(test11, int a) +{ + test11_result =3D a =3D=3D 1; + return 0; +} --=20 2.52.0