From nobody Sun Feb 8 07:58:41 2026 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D15CA329E5C for ; Wed, 24 Dec 2025 13:08:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581689; cv=none; b=W1qV9CHRe+EjUwWfNQGQdPYu4haPqmikcElIHZ9E5nE+j3tAKLRzSkOsBcu/BXKk7sqHFWgKvrzGlKO31CLMneziwX+U/nEEdYNLvQbtL9Uh2E5TrEBcyZDITreJJWm4r4NLrmbmGTdbOgRg5cZHb0mr5vRld0wy89J1AYvY10o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581689; c=relaxed/simple; bh=pUUKOdtTUqO4NmuYhy/Q7yNsb6oms7KMTaVRfVKQtBM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=t3W1jf0ndLXrEvXc0J6j3OZM8pA1kQX3CfgqnzT0t72+qJdfX4Gk1CLV25Tj+JxyCdDOy83/h9v8hyD/ZBKitAQOugdJnK9K2lxmh3grtc+DziSs1VCtmvInGJP0TGjhvyVbDxYV3aIFbDssx8Ay1yW5rv7eyqZZubutScAheL0= 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=Dpr17DcN; arc=none smtp.client-ip=209.85.210.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Dpr17DcN" Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-7b9c17dd591so5198112b3a.3 for ; Wed, 24 Dec 2025 05:08:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766581687; x=1767186487; 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=oBQerbrAseJ0wNmfc4qDkWe10xfx+uhD8vf65gI3zMs=; b=Dpr17DcNA65rukTbKAMNYMSQ8WCoEwhUW/otvuQFZJvIztE18PNfuZZ0U+06aIQSKP p6h10eMKlCdMFAeu1ajr44gWo7Z4H/b6xZR45cs0Ir7ycjREfa0zYrk57IHzEQ1mKHv5 5sDtmp16iFylDTKCEJ/BQo8VHAhGAddHG/RMfanuN2yFQhWc3QKa0UxpfCG5HBSmNqTX u1iQAEGpjSLPWAe4btqKE3+ViJnvt4sYnR+oWHti4qBvqAizCRJmZBo0u9yhRwwNj4IW aiFQz0OYWDEXLWXxjSCgUcQJwzdfp/v+QuN4pwgwAv45/P+6FX9nh3FKqcfn2WjKhhGg +NVQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766581687; x=1767186487; 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=oBQerbrAseJ0wNmfc4qDkWe10xfx+uhD8vf65gI3zMs=; b=uYpD5qiTsM2dLWNzSCc14zBGquiyks16sHCac+Pdd9JJol5Bu+EDafJ5uitNRibRtV pYPR2wh8sO5mADtPY6eJ2HX0e+rNX0kjbbmS9z0BRDGDJ0ZWh3+osTKW9sn1uovXD+hr I/Mg+Cb4FSL6vBQcUq5+hrI89zZsFTq3XBcSwYkBjmDQrv6ATKmbwhP2oOiDjBv+qs0y KPlD9DJPJMQJuGpdKNklGcBjanijgvMWDYteTpmPbdDUtabkh9RgKWrHSjsTMVEQ8Oq6 I3RWpdiiK3WOWCsC9g62QUieZIyYvr5qlQKVwdHrDuLat1xjh1zBT41+tqnxNOW499Rt geyA== X-Forwarded-Encrypted: i=1; AJvYcCXlA1Bczzweol89KSo9WxD82jFZumfKsA8xs3RlikL2dMxZ/bpkqgsxNoevh3Y7T6y9GFUAr4V917yDkVU=@vger.kernel.org X-Gm-Message-State: AOJu0Yxgw2k+KCkA9fI49hTNhDuR27G2XTnWrJB2Tk/vkwITp7MEDu3t kp1EeDuZAlKARurUSeVoTO6p8dr8f/ZJVFlgUCyFDIOgauKAZApzQn0/ X-Gm-Gg: AY/fxX48qLPD+49HUPtMzflBHuP+p16+zqg3BLo0bKufn5/XsN0HoIH7eKLKWAp48E+ P0K8f9lEKBj09FO6XBhiVCjoN2z5tRsZe6QxZub7I3wt0BMddDG6ehEFH0k2ehj7e/VHfjeyWIu YyEt40OPlbMbkF/NTOi4B5jmrE+jA92F2P1QGDKUHQLynQXiCKxZDcbWr+BfxJDxp3csrbLpGMP GYuTMZdXpRI9lSB9yIf/vKAMz0IuscerS2ZgUm6jUMnlbnQjrGpd4pleKd8dh/gtDa+hvl9fHI0 gqhhLgHSEHp3pdCh3WLixs9hLOgk0RcAxrTRtwkTCepcuIoXJBAi4U3Ww2QE346Xx1FrSiPTHKy 7XQ1PWu4MySVC71zbQT2K5eIfvJSVqop+Tu+9tMrrzQnlN9T1semFL3MJz4jgZJMoQzhoo+LhwZ 5U8lEHroE= X-Google-Smtp-Source: AGHT+IEE0A+EAyHteQ1+feJuEKcZhZTWau4+ungHV2FG1mfZuB1+RyVXiFjJRoHMSIk+VQCBFXipfg== X-Received: by 2002:a05:6a00:1d23:b0:7e8:4587:e8b9 with SMTP id d2e1a72fcca58-7ff65f7907cmr16085917b3a.44.1766581686921; Wed, 24 Dec 2025 05:08:06 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7dfac28fsm16841173b3a.32.2025.12.24.05.07.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Dec 2025 05:08:06 -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 v5 01/10] bpf: add fsession support Date: Wed, 24 Dec 2025 21:07:26 +0800 Message-ID: <20251224130735.201422-2-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251224130735.201422-1-dongml2@chinatelecom.cn> References: <20251224130735.201422-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The fsession is something that similar to kprobe session. It allow to attach a single BPF program to both the entry and the exit of the target functions. Introduce the struct bpf_fsession_link, which allows to add the link to both the fentry and fexit progs_hlist of the trampoline. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v5: - unify the name to "fsession" - use more explicit way in __bpf_trampoline_link_prog() v4: - instead of adding a new hlist to progs_hlist in trampoline, add the bpf program to both the fentry hlist and the fexit hlist. --- include/linux/bpf.h | 20 ++++++++++ include/uapi/linux/bpf.h | 1 + kernel/bpf/btf.c | 2 + kernel/bpf/syscall.c | 18 ++++++++- kernel/bpf/trampoline.c | 40 ++++++++++++++++--- kernel/bpf/verifier.c | 12 ++++-- net/bpf/test_run.c | 1 + net/core/bpf_sk_storage.c | 1 + tools/include/uapi/linux/bpf.h | 1 + .../bpf/prog_tests/tracing_failure.c | 2 +- 10 files changed, 88 insertions(+), 10 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 28d8d6b7bb1e..63e1bc29485e 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1291,6 +1291,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 { @@ -1854,6 +1855,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; @@ -2114,6 +2120,20 @@ static inline void bpf_struct_ops_desc_release(struc= t bpf_struct_ops_desc *st_op =20 #endif =20 +static inline int bpf_fsession_cnt(struct bpf_tramp_links *links) +{ + struct bpf_tramp_links fentries =3D links[BPF_TRAMP_FENTRY]; + int cnt =3D 0; + + for (int i =3D 0; i < links[BPF_TRAMP_FENTRY].nr_links; i++) { + if (fentries.links[i]->link.prog->expected_attach_type =3D=3D + BPF_TRACE_FSESSION) + cnt++; + } + + return cnt; +} + int bpf_prog_ctx_arg_info_init(struct bpf_prog *prog, const struct bpf_ctx_arg_aux *info, u32 cnt); =20 diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 84ced3ed2d21..cd2d7c4fc6e7 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/kernel/bpf/btf.c b/kernel/bpf/btf.c index 0de8fc8a0e0b..dff3eae4b51e 100644 --- a/kernel/bpf/btf.c +++ b/kernel/bpf/btf.c @@ -6107,6 +6107,7 @@ static int btf_validate_prog_ctx_type(struct bpf_veri= fier_log *log, const struct case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: case BPF_MODIFY_RETURN: + case BPF_TRACE_FSESSION: /* allow u64* as ctx */ if (btf_is_int(t) && t->size =3D=3D 8) return 0; @@ -6704,6 +6705,7 @@ bool btf_ctx_access(int off, int size, enum bpf_acces= s_type type, fallthrough; case BPF_LSM_CGROUP: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: /* When LSM programs are attached to void LSM hooks * they use FEXIT trampolines and when attached to * int LSM hooks, they use MODIFY_RETURN trampolines. diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 3080cc48bfc3..3bfaf550ad08 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -3579,6 +3579,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; @@ -3628,7 +3629,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; @@ -4352,6 +4367,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 976d89011b15..77d474fc973a 100644 --- a/kernel/bpf/trampoline.c +++ b/kernel/bpf/trampoline.c @@ -111,7 +111,7 @@ bool bpf_prog_has_trampoline(const struct bpf_prog *pro= g) =20 return (ptype =3D=3D BPF_PROG_TYPE_TRACING && (eatype =3D=3D BPF_TRACE_FENTRY || eatype =3D=3D BPF_TRACE_FEXIT || - eatype =3D=3D BPF_MODIFY_RETURN)) || + eatype =3D=3D BPF_MODIFY_RETURN || eatype =3D=3D BPF_TRACE_FSESSION)) || (ptype =3D=3D BPF_PROG_TYPE_LSM && eatype =3D=3D BPF_LSM_MAC); } =20 @@ -559,6 +559,8 @@ static enum bpf_tramp_prog_type bpf_attach_type_to_tram= p(struct bpf_prog *prog) return BPF_TRAMP_MODIFY_RETURN; case BPF_TRACE_FEXIT: return BPF_TRAMP_FEXIT; + case BPF_TRACE_FSESSION: + return BPF_TRAMP_FSESSION; case BPF_LSM_MAC: if (!prog->aux->attach_func_proto->type) /* The function returns void, we cannot modify its @@ -596,6 +598,8 @@ static int __bpf_trampoline_link_prog(struct bpf_tramp_= link *link, { enum bpf_tramp_prog_type kind; struct bpf_tramp_link *link_exiting; + struct bpf_fsession_link *fslink; + struct hlist_head *prog_list; int err =3D 0; int cnt =3D 0, i; =20 @@ -621,24 +625,44 @@ static int __bpf_trampoline_link_prog(struct bpf_tram= p_link *link, BPF_MOD_JUMP, NULL, link->link.prog->bpf_func); } + if (kind =3D=3D BPF_TRAMP_FSESSION) { + prog_list =3D &tr->progs_hlist[BPF_TRAMP_FENTRY]; + cnt++; + } else { + prog_list =3D &tr->progs_hlist[kind]; + } if (cnt >=3D BPF_MAX_TRAMP_LINKS) return -E2BIG; if (!hlist_unhashed(&link->tramp_hlist)) /* prog already linked */ return -EBUSY; - hlist_for_each_entry(link_exiting, &tr->progs_hlist[kind], tramp_hlist) { + hlist_for_each_entry(link_exiting, prog_list, tramp_hlist) { if (link_exiting->link.prog !=3D link->link.prog) continue; /* prog already linked */ return -EBUSY; } =20 - hlist_add_head(&link->tramp_hlist, &tr->progs_hlist[kind]); - tr->progs_cnt[kind]++; + hlist_add_head(&link->tramp_hlist, prog_list); + if (kind =3D=3D BPF_TRAMP_FSESSION) { + tr->progs_cnt[BPF_TRAMP_FENTRY]++; + fslink =3D container_of(link, struct bpf_fsession_link, link.link); + hlist_add_head(&fslink->fexit.tramp_hlist, + &tr->progs_hlist[BPF_TRAMP_FEXIT]); + tr->progs_cnt[BPF_TRAMP_FEXIT]++; + } else { + tr->progs_cnt[kind]++; + } err =3D bpf_trampoline_update(tr, true /* lock_direct_mutex */); if (err) { hlist_del_init(&link->tramp_hlist); - tr->progs_cnt[kind]--; + if (kind =3D=3D BPF_TRAMP_FSESSION) { + tr->progs_cnt[BPF_TRAMP_FENTRY]--; + hlist_del_init(&fslink->fexit.tramp_hlist); + tr->progs_cnt[BPF_TRAMP_FEXIT]--; + } else { + tr->progs_cnt[kind]--; + } } return err; } @@ -659,6 +683,7 @@ static int __bpf_trampoline_unlink_prog(struct bpf_tram= p_link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog) { + struct bpf_fsession_link *fslink; enum bpf_tramp_prog_type kind; int err; =20 @@ -672,6 +697,11 @@ static int __bpf_trampoline_unlink_prog(struct bpf_tra= mp_link *link, guard(mutex)(&tgt_prog->aux->ext_mutex); tgt_prog->aux->is_extended =3D false; return err; + } else if (kind =3D=3D BPF_TRAMP_FSESSION) { + fslink =3D container_of(link, struct bpf_fsession_link, link.link); + hlist_del_init(&fslink->fexit.tramp_hlist); + tr->progs_cnt[BPF_TRAMP_FEXIT]--; + kind =3D BPF_TRAMP_FENTRY; } hlist_del_init(&link->tramp_hlist); tr->progs_cnt[kind]--; diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index a31c032b2dd6..b9714a7c3c5f 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -17402,6 +17402,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: @@ -23298,6 +23299,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); @@ -24242,7 +24244,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 @@ -24257,7 +24260,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 { @@ -24341,6 +24344,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); @@ -24507,6 +24511,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; @@ -24588,9 +24593,10 @@ static int check_attach_btf_id(struct bpf_verifier= _env *env) tgt_info.tgt_name); return -EINVAL; } else if ((prog->expected_attach_type =3D=3D BPF_TRACE_FEXIT || + prog->expected_attach_type =3D=3D BPF_TRACE_FSESSION || prog->expected_attach_type =3D=3D BPF_MODIFY_RETURN) && btf_id_set_contains(&noreturn_deny, btf_id)) { - verbose(env, "Attaching fexit/fmod_ret to __noreturn function '%s' is re= jected.\n", + verbose(env, "Attaching fexit/fsession/fmod_ret to __noreturn function '= %s' is rejected.\n", tgt_info.tgt_name); return -EINVAL; } diff --git a/net/bpf/test_run.c b/net/bpf/test_run.c index 655efac6f133..3b0d9bd039de 100644 --- a/net/bpf/test_run.c +++ b/net/bpf/test_run.c @@ -685,6 +685,7 @@ int bpf_prog_test_run_tracing(struct bpf_prog *prog, switch (prog->expected_attach_type) { case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: if (bpf_fentry_test1(1) !=3D 2 || bpf_fentry_test2(2, 3) !=3D 5 || bpf_fentry_test3(4, 5, 6) !=3D 15 || diff --git a/net/core/bpf_sk_storage.c b/net/core/bpf_sk_storage.c index 850dd736ccd1..de111818f3a0 100644 --- a/net/core/bpf_sk_storage.c +++ b/net/core/bpf_sk_storage.c @@ -365,6 +365,7 @@ static bool bpf_sk_storage_tracing_allowed(const struct= bpf_prog *prog) return true; case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: + case BPF_TRACE_FSESSION: return !!strncmp(prog->aux->attach_func_name, "bpf_sk_storage", strlen("bpf_sk_storage")); default: diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 6b92b0847ec2..012abaf3d4ac 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -1145,6 +1145,7 @@ enum bpf_attach_type { BPF_NETKIT_PEER, BPF_TRACE_KPROBE_SESSION, BPF_TRACE_UPROBE_SESSION, + BPF_TRACE_FSESSION, __MAX_BPF_ATTACH_TYPE }; =20 diff --git a/tools/testing/selftests/bpf/prog_tests/tracing_failure.c b/too= ls/testing/selftests/bpf/prog_tests/tracing_failure.c index 10e231965589..f9f9e1cb87bf 100644 --- a/tools/testing/selftests/bpf/prog_tests/tracing_failure.c +++ b/tools/testing/selftests/bpf/prog_tests/tracing_failure.c @@ -73,7 +73,7 @@ static void test_tracing_deny(void) static void test_fexit_noreturns(void) { test_tracing_fail_prog("fexit_noreturns", - "Attaching fexit/fmod_ret to __noreturn function 'do_exit' is re= jected."); + "Attaching fexit/fsession/fmod_ret to __noreturn function 'do_ex= it' is rejected."); } =20 void test_tracing_failure(void) --=20 2.52.0 From nobody Sun Feb 8 07:58:41 2026 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2238133A00C for ; Wed, 24 Dec 2025 13:08:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581703; cv=none; b=NBcwlFxsw0nUK9cEtBX8B71tYLadAsc26N8kdSey4VyF5ApJBahFSwUT29IbXJ5+cvHaFnR8OBmqx0NklaoUEVvbo3UauGaL0UfuaO8+6QwHxiKHAeB5Xj8LmxN4dsyoEi77h/ANTJfj7qNNyalr8VppdCmJG5Z9+tx12S8TJ1M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581703; c=relaxed/simple; bh=KfUROJWj+WZRegyU3vO1Susv7TMJMQE38QMpRIDYxrU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=dtKCm2dAkJfkAhzH0cb+costPqnYNGTdEqT3zZrFfo7fukrtn3hVETmWkYMTYkwYTLXXz2XMxk3yDpkp0bn6+eL6HnPWOfl9TnzJ7oVvvmL1B+xzV2eR81a9+Vern5iAY0skxQEDUs0xlgLFzn/io2IZEJPHl1Qyse40cJTQcdw= 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=dmf0PApH; arc=none smtp.client-ip=209.85.210.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="dmf0PApH" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-7b9215e55e6so3801255b3a.2 for ; Wed, 24 Dec 2025 05:08:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766581699; x=1767186499; 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=GnD1gjr4XFspTsO3rXAFVOp0yxAXlXjec2rCDPwFC1I=; b=dmf0PApHFUenpAGL+cp3Z74EInEEH0wTvP1pfHNPcmLH2Lb6ewS/d3OCY3nhMj7Z06 8DUPF7oG5LFkDSEk2pkgqUuud4YIR4YTERabEo+weCuZ1aCf8v7AM+tI8O7w44EbrbDp XF7LgKLbK8HEzxRBrmeFukbpDzkYrF0PWNH5E6QWLKtBue2+4+MEAqHndqtkHEO1dAvE OQ/d6Q1PFbxFcfl3/onk/ADa+CpKW8UhZzLOk+i4rqS3iaB8S6MZmKqDBhg4kpwoobI6 KXK3sa+srnbN95zg4C/hSVhjZKh5cY+iPBfH1ELUHNppUqASTu2xEdx0FP0rfm/SvNKp Hdag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766581699; x=1767186499; 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=GnD1gjr4XFspTsO3rXAFVOp0yxAXlXjec2rCDPwFC1I=; b=at0plVtQjJmVbWwWytxzUbhT2KJqpqZqozrFRqrfmRHFLgLOlCoBowVKluTVCmmH9h mGfnjMRFAQYduFBXf5LLTf2EGqE3esc1X+acrJFmEq6CpJzvaePMiwgivPs3/7U7FH6X Danb2OtU8QgjyC2cnoVHpRAfFzC7V5SSiQiwO6N9VRwQwKxNm5hFE6ZiG+Rxvwbn5gBm z/hF0ZtCgts5PiGMdr/0dAeEkYKSMXgXCfMzkniXHLL2C68cKK3lo8u1D9Cb5JQl7R+b xVBQblpF41qbFUOQxW73NOvjj7imOmV7koWAF5sBM+g/EFxmdKgu1CUVZmVlhBq3Gs64 WfTg== X-Forwarded-Encrypted: i=1; AJvYcCVcnJ8H/omhSL7B4NXLAPby0kg2eJ8wWucTRdibb5Cl366/QAZfwWMXKMBR2TGFibA+GHGDqnClJqk5q4I=@vger.kernel.org X-Gm-Message-State: AOJu0YwGJItk+evCgTsCFf+YuW7Ui03UDWzkkBzT/XeHwzxZfF14J3EB m7wZ4RdX3ddAbvIG2h3Vtv+mgyNixuEqsGtjc/bYYgreVFLMuxYXyL1g X-Gm-Gg: AY/fxX5nUm5Azyl2NdDN+37qXR27XybhWxEAGVrhXBnIKU87nxk/NDbQ9eJccrYrXgN F70jIIDLpRgnggD6uv+UR+qZ+6EtYQupkXHjpEh5gY5MT6R05VwGEP5lHPsfQIBR2jI5oUUkguU naKmrCxB4BB3aCkK5SvGT4VetiuRozb1TszE0JvISlm8C0JNfbQA2mCF7HQy6tFG8TuUXECdiHM Wr/u4AcXqlv0wRU8MHiTNShm3glysJPs1bnJ4krgGhRd/Ji30JK3gg/TZHF0LjeZcMthYafGlLZ i8MfznY2Por3AvPfz7t49Rj6Z85PRyn2K2UNL0/aQVmzSvOEgpxiYHkJhbj5PqrFdyLpescpjCP A8PpriQo4ySOHi2FQAUaVoV1abFXiR3263Q69JDLhCFwDhACXGrY/E1Y9WXNltC8ecA+Q/Xls4+ Zz4ziF0Nk= X-Google-Smtp-Source: AGHT+IHprwedyAHBDG0D1dfPHlSVYg6dF0Z26rF6OK1U5LEGp6giH3ZZn20unITKVgvBwuK5w/x85g== X-Received: by 2002:a05:6a00:b902:b0:7f7:3518:4be0 with SMTP id d2e1a72fcca58-7ff648e505bmr15249130b3a.20.1766581699346; Wed, 24 Dec 2025 05:08:19 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7dfac28fsm16841173b3a.32.2025.12.24.05.08.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Dec 2025 05:08:18 -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 v5 02/10] bpf: use last 8-bits for the nr_args in trampoline Date: Wed, 24 Dec 2025 21:07:27 +0800 Message-ID: <20251224130735.201422-3-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251224130735.201422-1-dongml2@chinatelecom.cn> References: <20251224130735.201422-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" For now, ctx[-1] is used to store the nr_args in the trampoline. However, 1-byte is enough to store such information. Therefore, we use only the last byte of ctx[-1] to store the nr_args, and reserve the rest for other usages. Signed-off-by: Menglong Dong --- kernel/bpf/verifier.c | 35 +++++++++++++++++++---------------- kernel/trace/bpf_trace.c | 4 ++-- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index b9714a7c3c5f..a99e286a504d 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -23275,15 +23275,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) @@ -23303,12 +23304,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; @@ -23329,8 +23331,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 d57727abaade..10c9992d2745 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -1194,7 +1194,7 @@ const struct bpf_func_proto bpf_get_branch_snapshot_p= roto =3D { BPF_CALL_3(get_func_arg, void *, ctx, u32, n, u64 *, value) { /* This helper call is inlined by verifier. */ - u64 nr_args =3D ((u64 *)ctx)[-1]; + u64 nr_args =3D ((u64 *)ctx)[-1] & 0xFF; =20 if ((u64) n >=3D nr_args) return -EINVAL; @@ -1214,7 +1214,7 @@ static const struct bpf_func_proto bpf_get_func_arg_p= roto =3D { BPF_CALL_2(get_func_ret, void *, ctx, u64 *, value) { /* This helper call is inlined by verifier. */ - u64 nr_args =3D ((u64 *)ctx)[-1]; + u64 nr_args =3D ((u64 *)ctx)[-1] & 0xFF; =20 *value =3D ((u64 *)ctx)[nr_args]; return 0; --=20 2.52.0 From nobody Sun Feb 8 07:58:41 2026 Received: from mail-pj1-f65.google.com (mail-pj1-f65.google.com [209.85.216.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7286733B96B for ; Wed, 24 Dec 2025 13:08:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581713; cv=none; b=bwi2EnxuiOdAuKHZv0m5yk2fm4AD2hoGfkmoySvXoHLvdfsF5/LukvtqlZ0zG6jW1SOaCjZO3uVE2XN7872s2g/f0QB9WsmAWiT9HAWd/GDXtOPO6CaANmRyByxruoJQIr87L9WJTX3Z+IZ1ODB2/rfIYxBA55sWzyvqSMM5aOU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581713; c=relaxed/simple; bh=OmpxSP1U88Co5VJkwTXEd6T5INcF4x1eikGmMC2/2wc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i/mJqIHr76VR3VkbB4A/RVpQgrgX1wFotixr6IvgtuFxrETLPTtQOhV5wAJrGpQ8Fg+dmR+eBp9b+YpRDAxvzyHTCt0TVno3BprIAgygJ+JkKvBmGD9HPiVCQU+rqvJbzC2qB49MK/DGKeukXzq32NLmxsrE0yiSi93QMhdWoGY= 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=EwxUOFgU; arc=none smtp.client-ip=209.85.216.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="EwxUOFgU" Received: by mail-pj1-f65.google.com with SMTP id 98e67ed59e1d1-34c5f0222b0so5035197a91.3 for ; Wed, 24 Dec 2025 05:08:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766581712; x=1767186512; 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=in+O3L4XwQY73b2AFr/2ULZjn29Dh1Oq68SSaU7L1pA=; b=EwxUOFgUdI5fW5GFVpMEz+HP8YHljIWVQJyrOWpp6k+tK5rt4oZwqxuIFQ8agT1mcB etbkSCDsJEOSR4VV0f2knkIzsdms3fkCm/rXK2cX/JQ1X8LPLeQfOjnq1W4VzmCstN7D /1Lk1uvxi4hS1u6ds53IFhf5UUAgesTl7Im4cLq9QMWSeb+QfrMBAK4CZisLlzXnrBat +eI8Rgt/RWvrNlY6LoCf1RJiM1vADl7HZ9xulFn8AD8SIOVsWVc9DyPshayoPVQqhTSK w3RpDhcus+K0+oUjSsswFgYcq9jflodLFK8C4FbAhHt0uzDDZbfw2ZQgZ/VSLtKAaI20 Tp3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766581712; x=1767186512; 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=in+O3L4XwQY73b2AFr/2ULZjn29Dh1Oq68SSaU7L1pA=; b=SPGIBJyKpF4rxOE9xen6SHYaKaObBh2GP6anRuJ/CSETzbF8M9ZZGZFjPSopAM9ZkW DtOSSB2F3k4/LOVvMihJ9udEkaiNZPON4mq8DwSCTiUCdTElimSug3aJDHtRN3qOse1U mjF1RX15vK4efnq6fHzxL7VliV5Z7WJiGdBJXbcb3e2k6AVzoSeX6ZFL7hYaO6SwTOXT cffe/IflxyjwZcSP8f4MFJpJ97O2MuFcC25GRXPafHhdOSwHEi2AdmF9CQnkVMCCB2IM arnHGH06dHaspfcOk69gjBr+rtqdIRfXaQOMsNmWM+R8E9Gp11WAy+hFKPhTQLnZR510 MAjg== X-Forwarded-Encrypted: i=1; AJvYcCWWPuYDXCsyBxRu0RMAzdwDkg4cKoLTqI0V0r1hL18OmCEpDS9dd+mgabtKyjdZgLkI3JYowQJ0QAiP0fE=@vger.kernel.org X-Gm-Message-State: AOJu0YzFzGxCrsVlRkeDGULEeotS78wjbZcUSVHUMlgF4aVWYxBqXV+w xKfpjxC7GYgLPC4vPz3OsblhtttllkQMswVrDNTBxv74uTO99gY5Vg1e X-Gm-Gg: AY/fxX4gKoqISaTyqVTbWr1rImqZP3A1jLFn6C9XPovh7ogIEa2Y4n/Ob4MXwV4jcgU B+HNt1/PrXeFOUuBLu97vr19RephX48ctffEJxYwnbnxBd/iVmwvOcQuZtM4Oco/9KmVb617bk7 UlCB+38XQLPzHJ/mkJa+GP3JMW0PqhYnZbRFQkTUESePMpBkNp+AV2DDVwzZoqDGH+T1jteZt9E AIXmNjj4rpD7UuR77mKscA02P+R9OkRjf8DmW6cIYBgr7FD0rN6QXIjKOPhePtspIYtjJBKastg 72QXC29lwrjjXTSLNwyd8qXdUO80G5qD47HTiOGfoST4TDwb1X5fb0ldwISzSsizqjGebjx3v6e P3WKRvE+CvlzCxsZNprP8eHoSfFvqfSGz906k2KLLq8Z0uV+m0M+BUPa7rXh+BjCAKCcJ34xkz3 G4bMwqH2g= X-Google-Smtp-Source: AGHT+IHsooDeoyyjHMV5oyHx0AmBp/Pzmm0oz9vs6l5WB68tOVKfc4IFwKrEI/dk8CS++6ElsKvHPw== X-Received: by 2002:a17:90b:134d:b0:34c:aba2:dd95 with SMTP id 98e67ed59e1d1-34e921c700emr16409572a91.26.1766581711860; Wed, 24 Dec 2025 05:08:31 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7dfac28fsm16841173b3a.32.2025.12.24.05.08.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Dec 2025 05:08:31 -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 v5 03/10] bpf: add the kfunc bpf_fsession_is_return Date: Wed, 24 Dec 2025 21:07:28 +0800 Message-ID: <20251224130735.201422-4-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251224130735.201422-1-dongml2@chinatelecom.cn> References: <20251224130735.201422-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If fsession exists, we will use the bit (1 << BPF_TRAMP_M_IS_RETURN) in ctx[-1] to store the "is_return" flag. Introduce the kfunc bpf_fsession_is_return(), which is used to tell if it is fexit currently. Meanwhile, inline it in the verifier. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- 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 | 3 +++ kernel/bpf/verifier.c | 11 +++++++++- kernel/trace/bpf_trace.c | 43 +++++++++++++++++++++++++++++++++++++--- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index 63e1bc29485e..dc6b4109f0bf 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1213,6 +1213,9 @@ enum { #endif }; =20 +#define BPF_TRAMP_M_NR_ARGS 0 +#define BPF_TRAMP_M_IS_RETURN 8 + struct bpf_tramp_links { struct bpf_tramp_link *links[BPF_MAX_TRAMP_LINKS]; int nr_links; diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index a99e286a504d..8a5787e6ab0b 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -12380,6 +12380,7 @@ enum special_kfunc_type { KF___bpf_trap, KF_bpf_task_work_schedule_signal_impl, KF_bpf_task_work_schedule_resume_impl, + KF_bpf_fsession_is_return, }; =20 BTF_ID_LIST(special_kfunc_list) @@ -12454,6 +12455,7 @@ BTF_ID(func, bpf_dynptr_file_discard) BTF_ID(func, __bpf_trap) BTF_ID(func, bpf_task_work_schedule_signal_impl) BTF_ID(func, bpf_task_work_schedule_resume_impl) +BTF_ID(func, bpf_fsession_is_return) =20 static bool is_task_work_add_kfunc(u32 func_id) { @@ -12508,7 +12510,8 @@ get_kfunc_ptr_arg_type(struct bpf_verifier_env *env, struct bpf_reg_state *reg =3D ®s[regno]; bool arg_mem_size =3D false; =20 - if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx]) + if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_fsession_is_return]) return KF_ARG_PTR_TO_CTX; =20 /* In this function, we verify the kfunc's BTF as per the argument type, @@ -22556,6 +22559,12 @@ 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_fsession_is_ret= urn]) { + /* Load nr_args from ctx - 8 */ + insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_M_IS_RETURN); + insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1); + *cnt =3D 3; } =20 if (env->insn_aux_data[insn_idx].arg_prog) { diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 10c9992d2745..8a94a507bd51 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -3356,12 +3356,49 @@ static const struct btf_kfunc_id_set bpf_kprobe_mul= ti_kfunc_set =3D { .filter =3D bpf_kprobe_multi_filter, }; =20 -static int __init bpf_kprobe_multi_kfuncs_init(void) +__bpf_kfunc_start_defs(); + +__bpf_kfunc bool bpf_fsession_is_return(void *ctx) +{ + /* This helper call is inlined by verifier. */ + return !!(((u64 *)ctx)[-1] & (1 << BPF_TRAMP_M_IS_RETURN)); +} + +__bpf_kfunc_end_defs(); + +BTF_KFUNCS_START(tracing_kfunc_set_ids) +BTF_ID_FLAGS(func, bpf_fsession_is_return, KF_FASTCALL) +BTF_KFUNCS_END(tracing_kfunc_set_ids) + +static int bpf_tracing_filter(const struct bpf_prog *prog, u32 kfunc_id) { - return register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_kprobe_multi_= kfunc_set); + if (!btf_id_set8_contains(&tracing_kfunc_set_ids, kfunc_id)) + return 0; + + if (prog->type !=3D BPF_PROG_TYPE_TRACING || + prog->expected_attach_type !=3D BPF_TRACE_FSESSION) + return -EINVAL; + + return 0; +} + +static const struct btf_kfunc_id_set bpf_tracing_kfunc_set =3D { + .owner =3D THIS_MODULE, + .set =3D &tracing_kfunc_set_ids, + .filter =3D bpf_tracing_filter, +}; + +static int __init bpf_trace_kfuncs_init(void) +{ + int err =3D 0; + + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_KPROBE, &bpf_kprob= e_multi_kfunc_set); + err =3D err ?: register_btf_kfunc_id_set(BPF_PROG_TYPE_TRACING, &bpf_trac= ing_kfunc_set); + + return err; } =20 -late_initcall(bpf_kprobe_multi_kfuncs_init); +late_initcall(bpf_trace_kfuncs_init); =20 typedef int (*copy_fn_t)(void *dst, const void *src, u32 size, struct task= _struct *tsk); =20 --=20 2.52.0 From nobody Sun Feb 8 07:58:41 2026 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 01280337BB4 for ; Wed, 24 Dec 2025 13:08:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581730; cv=none; b=VGJMTpsAMnvXQ9GyW93husotI6ENYM0kuAmEttSc2RbrXGz3zhrLcCX5sg7mp5/Jz7vvgu7OLUErp4uZElPjsEDxuhfdvRYEigNrm54HUrc4FMp2tqvdLy+WKCuYw1ExcRjd6OjnfITjxDzcTNJ40fZxKkE8mqhhjLTK0TlYo6g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581730; c=relaxed/simple; bh=AwalfVv6m0dQt+f9r7kLNSHNISYXkJr76Q3fUrZMrgQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PdhxDgaJWVqPAaMgljXQfTym95zC2QCjEMdxrUMX/EbSev+dSjYBwIxvpBz6CLDShPXZEJf99mKLj+n8wB36uYdYryLOUxBPo93zpa5hDHZ0cz8jErwlUAhxh4OtC7wOqh42NMq8lAUmci+4+O2VEppIjtMLk307kqsk/mmGX6k= 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=mRSfmIlW; arc=none smtp.client-ip=209.85.210.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mRSfmIlW" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-7bc248dc16aso4854532b3a.0 for ; Wed, 24 Dec 2025 05:08:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766581727; x=1767186527; 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=o0tuqo4muaPkDdS8W/BNaU8fWSvfbpQMCrEFv+IUd5c=; b=mRSfmIlWRmlVrdDBF5OJ/N0E/+N07MyTAE+gxoSudWX+Rto5B+ehyVDKvGV3TCur1s R8LMwQHRkxi5BjJE49DUbC/uTepzIsSzUIjrAiKLvQQJmnkqZcG5FppW9WJHpZ+yjuwf MLofoo4i3XDzPaHj+l0u8JbVFU2FLqGaQowtTV58dl0DbztdoAHDeqA5pmsX8Juz4scA 4H1ZAtRGelnTNBy2hTxtRmpZQgasgJ3AtPRScCzWsxku7LIv/Vu/DCKTj6P65+5brUMp z+LJu9r1Rkp1T8CxqMhkOPbqUGYRJF1MpUPbcNx9Rk7M60+f6JTE8rqj2Q8jQdRb0SGU UWPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766581727; x=1767186527; 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=o0tuqo4muaPkDdS8W/BNaU8fWSvfbpQMCrEFv+IUd5c=; b=f9tZ0JztZjg4XTtSHeiG3rUCbCD068IaUi2XMF4GoqAiUOA+ObxpuByHzKgkGlrlXA p0a29oNggGoBCJboZbN/nm1SbEbzncHsSP/4yUa9pc33TSzN/pO/7cr1ALkNyH0qOsGc wUK4X3wVY7F9qKg6yYS/heijtwBt0d8x8cwYuldx/Sh1+CER8nmv+EeLly1yudjWFfyL aPMpIGjnFXSUCeS6PibOnTH16FFP9/5LqHKD/gEdfhJblUXV+cyNhjllLDb9g4+wODrD 8H3DAV1UsGF+iRMMEBipEcQ8DqZdZvtlrby0MEezTQeBdjdiaIWYpNOzaoJaZLVtc5v4 60cg== X-Forwarded-Encrypted: i=1; AJvYcCWldQzAuHtnLqh010C+GbTpiBU5ctpjCebCPK8RjIiks12Z7hVBIvdTtD0tdV02tbU3hWDT/TYt5G+mZ+I=@vger.kernel.org X-Gm-Message-State: AOJu0YxJVinpWUdOqEPgtlMKXsyLgfbkjJN6CZrvhqeeExLVle/ZDETf Jhz3pnv1l2hmyzDTpE980+Y3S5gr4lxHxw/AEywbwzuZkr5QJ1JtuX51 X-Gm-Gg: AY/fxX4IpAtWJBsp/+9MWgMAd/Xw5EXzNhdixPDNJB6oWbMoWHE4P38AMI9+lousagC VwfrOFXkIUn/by9OQASkVFfgg+tfZi89rEUGieRFJiW9Uacc8bxmiXBU2vt2Pjo63QL6nT8uJ3o s+MnJjHivU04m+CrENqxBMuQhcr5N1VjJNVBZvHrCds0V3OmC5NqBCfTtzvm9Mt1fbGDmd02zdw 7dxGI3REcrjnjIS1lxq2xRpMg8GGnFpLsYqnUiqYB1laKaJMYlUsWlP8DFrXGS28QKQbS9uNITL iY6bxqEYNMiaQILkFzaFkxVpd4Vg9JdtX/aTcGK/ILDrTRgnF3ydeQ8G7zEcmc4JhIufJ4BOlhN x/h/cHxGu/7cG43SPYazuXTkVOV/Zukn1YQ7y6TYx9Hv+xjCLkPgVytkOoVuGRnnZeVf6GaHZ7X EmZ/A7KycVuVY3qx1KXQ== X-Google-Smtp-Source: AGHT+IGloR8ssu486avHCKEdAqC0Ix5YfcJO8N9W563abq1gR5GklfLvtmD3nhTAWb70QG6dAC43rw== X-Received: by 2002:a05:6a00:3395:b0:7e8:4587:e8ca with SMTP id d2e1a72fcca58-7ff66a6c4eamr15790814b3a.61.1766581727172; Wed, 24 Dec 2025 05:08:47 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7dfac28fsm16841173b3a.32.2025.12.24.05.08.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Dec 2025 05:08:46 -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 v5 04/10] bpf: add the kfunc bpf_fsession_cookie Date: Wed, 24 Dec 2025 21:07:29 +0800 Message-ID: <20251224130735.201422-5-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251224130735.201422-1-dongml2@chinatelecom.cn> References: <20251224130735.201422-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Implement session cookie for fsession. In order to limit the stack usage, we make 4 as the maximum of the cookie count. The offset of the current cookie is stored in the "(ctx[-1] >> BPF_TRAMP_M_COOKIE) & 0xFF". Therefore, we can get the session cookie with ctx[-offset]. The stack will look like this: return value -> 8 bytes argN -> 8 bytes ... arg1 -> 8 bytes nr_args -> 8 bytes ip (optional) -> 8 bytes cookie2 -> 8 bytes cookie1 -> 8 bytes Inline the bpf_fsession_cookie() in the verifier too. Signed-off-by: Menglong Dong --- 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/trampoline.c | 13 +++++++++++-- kernel/bpf/verifier.c | 20 ++++++++++++++++++-- kernel/trace/bpf_trace.c | 9 +++++++++ 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/include/linux/bpf.h b/include/linux/bpf.h index dc6b4109f0bf..4095f4c2f833 100644 --- a/include/linux/bpf.h +++ b/include/linux/bpf.h @@ -1215,6 +1215,7 @@ enum { =20 #define BPF_TRAMP_M_NR_ARGS 0 #define BPF_TRAMP_M_IS_RETURN 8 +#define BPF_TRAMP_M_COOKIE 9 =20 struct bpf_tramp_links { struct bpf_tramp_link *links[BPF_MAX_TRAMP_LINKS]; @@ -1762,6 +1763,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_fsession_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 */ @@ -2137,6 +2139,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/trampoline.c b/kernel/bpf/trampoline.c index 77d474fc973a..347e92e7c54e 100644 --- a/kernel/bpf/trampoline.c +++ b/kernel/bpf/trampoline.c @@ -592,6 +592,8 @@ static int bpf_freplace_check_tgt_prog(struct bpf_prog = *tgt_prog) return 0; } =20 +#define BPF_TRAMP_MAX_COOKIES 4 + static int __bpf_trampoline_link_prog(struct bpf_tramp_link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog) @@ -600,7 +602,7 @@ static int __bpf_trampoline_link_prog(struct bpf_tramp_= link *link, struct bpf_tramp_link *link_exiting; struct bpf_fsession_link *fslink; struct hlist_head *prog_list; - int err =3D 0; + int err =3D 0, cookie_cnt =3D 0; int cnt =3D 0, i; =20 kind =3D bpf_attach_type_to_tramp(link->link.prog); @@ -637,11 +639,18 @@ static int __bpf_trampoline_link_prog(struct bpf_tram= p_link *link, /* prog already linked */ return -EBUSY; hlist_for_each_entry(link_exiting, prog_list, tramp_hlist) { - if (link_exiting->link.prog !=3D link->link.prog) + if (link_exiting->link.prog !=3D link->link.prog) { + if (kind =3D=3D BPF_TRAMP_FSESSION && + link_exiting->link.prog->call_session_cookie) + cookie_cnt++; continue; + } /* prog already linked */ return -EBUSY; } + if (link->link.prog->call_session_cookie && + cookie_cnt >=3D BPF_TRAMP_MAX_COOKIES) + return -E2BIG; =20 hlist_add_head(&link->tramp_hlist, prog_list); if (kind =3D=3D BPF_TRAMP_FSESSION) { diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 8a5787e6ab0b..8928ce5bbeb1 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -12381,6 +12381,7 @@ enum special_kfunc_type { KF_bpf_task_work_schedule_signal_impl, KF_bpf_task_work_schedule_resume_impl, KF_bpf_fsession_is_return, + KF_bpf_fsession_cookie, }; =20 BTF_ID_LIST(special_kfunc_list) @@ -12456,6 +12457,7 @@ BTF_ID(func, __bpf_trap) BTF_ID(func, bpf_task_work_schedule_signal_impl) BTF_ID(func, bpf_task_work_schedule_resume_impl) BTF_ID(func, bpf_fsession_is_return) +BTF_ID(func, bpf_fsession_cookie) =20 static bool is_task_work_add_kfunc(u32 func_id) { @@ -12511,7 +12513,8 @@ get_kfunc_ptr_arg_type(struct bpf_verifier_env *env, bool arg_mem_size =3D false; =20 if (meta->func_id =3D=3D special_kfunc_list[KF_bpf_cast_to_kern_ctx] || - meta->func_id =3D=3D special_kfunc_list[KF_bpf_fsession_is_return]) + meta->func_id =3D=3D special_kfunc_list[KF_bpf_fsession_is_return] || + meta->func_id =3D=3D special_kfunc_list[KF_bpf_fsession_cookie]) return KF_ARG_PTR_TO_CTX; =20 /* In this function, we verify the kfunc's BTF as per the argument type, @@ -14009,7 +14012,8 @@ static int check_kfunc_call(struct bpf_verifier_env= *env, struct bpf_insn *insn, } } =20 - if (meta.func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie]) { + if (meta.func_id =3D=3D special_kfunc_list[KF_bpf_session_cookie] || + meta.func_id =3D=3D special_kfunc_list[KF_bpf_fsession_cookie]) { meta.r0_size =3D sizeof(u64); meta.r0_rdonly =3D false; } @@ -14293,6 +14297,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_fsession_cookie]) + env->prog->call_session_cookie =3D true; + return 0; } =20 @@ -22565,6 +22572,15 @@ static int fixup_kfunc_call(struct bpf_verifier_en= v *env, struct bpf_insn *insn, insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_M_IS_RETURN); insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 1); *cnt =3D 3; + } else if (desc->func_id =3D=3D special_kfunc_list[KF_bpf_fsession_cookie= ]) { + /* Load nr_args from ctx - 8 */ + insn_buf[0] =3D BPF_LDX_MEM(BPF_DW, BPF_REG_0, BPF_REG_1, -8); + insn_buf[1] =3D BPF_ALU64_IMM(BPF_RSH, BPF_REG_0, BPF_TRAMP_M_COOKIE); + insn_buf[2] =3D BPF_ALU64_IMM(BPF_AND, BPF_REG_0, 0xFF); + insn_buf[3] =3D BPF_ALU64_IMM(BPF_LSH, BPF_REG_0, 3); + insn_buf[4] =3D BPF_ALU64_REG(BPF_SUB, BPF_REG_0, BPF_REG_1); + insn_buf[5] =3D BPF_ALU64_IMM(BPF_NEG, BPF_REG_0, 0); + *cnt =3D 6; } =20 if (env->insn_aux_data[insn_idx].arg_prog) { diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c index 8a94a507bd51..67f673c41d50 100644 --- a/kernel/trace/bpf_trace.c +++ b/kernel/trace/bpf_trace.c @@ -3364,10 +3364,19 @@ __bpf_kfunc bool bpf_fsession_is_return(void *ctx) return !!(((u64 *)ctx)[-1] & (1 << BPF_TRAMP_M_IS_RETURN)); } =20 +__bpf_kfunc u64 *bpf_fsession_cookie(void *ctx) +{ + /* This helper call is inlined by verifier. */ + u64 off =3D (((u64 *)ctx)[-1] >> BPF_TRAMP_M_COOKIE) & 0xFF; + + return &((u64 *)ctx)[-off]; +} + __bpf_kfunc_end_defs(); =20 BTF_KFUNCS_START(tracing_kfunc_set_ids) BTF_ID_FLAGS(func, bpf_fsession_is_return, KF_FASTCALL) +BTF_ID_FLAGS(func, bpf_fsession_cookie, KF_FASTCALL) BTF_KFUNCS_END(tracing_kfunc_set_ids) =20 static int bpf_tracing_filter(const struct bpf_prog *prog, u32 kfunc_id) --=20 2.52.0 From nobody Sun Feb 8 07:58:41 2026 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1C503337BB4 for ; Wed, 24 Dec 2025 13:09:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581743; cv=none; b=FO+N8ue0P2TpELisNJM1TFR0kOiz1WkMNksJ+YA3u8nvtFKiw1T16yDRMP1KPnvjE5zfyMEzKAJfhu2odeoJZjHX45+pH/dgoXNKywDQdOMaBShCFbdruN1V6YhFEGdYwwkeycAAXJAyNlBDwCu4Wb2LrOLJKNla3ivE2XLhpnI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581743; c=relaxed/simple; bh=8UjztYwJ3V5glcGLXb6BENiANc0oStuVeMSUdlMadWU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=db5qThMf6/J+/NFay/wQnjBFSc5FRirV8gNCYCaAXYP4aGatjvtwNwA7vs0rIJpwJLIpji/AjBe3Z7/xr+jqrRhWZW/C2Nc2cqlwpyUDd1G8hn+lnsxJzdnViAQM2j5KEBrGyUG+UQQ0bilAA0wg+7v+wMfk9xHhktdX/wSnXN0= 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=JwtpgmU+; arc=none smtp.client-ip=209.85.210.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JwtpgmU+" Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-8035e31d834so3329048b3a.2 for ; Wed, 24 Dec 2025 05:09:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766581740; x=1767186540; 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=zYyVRjly71IVaO9XpSMOkg3chszPFkxF2ByaNmXFw0U=; b=JwtpgmU+axPMV354GF5rKyQGBuMCnvO7N/YiVvTY9Gvi5haZ+KeyoE/RJX1R480w7p eOMpAikR650ghga+M22qQW7vWrC9oE1MxO1rlGwokPLPSWAlsfLGSRM5nslPHfEF0XSa qv128otBSgCNSj4JvwfcG7Sa2odfUvUWTgv6XH6PxMoHXNkCHGAm/b9ee27Z351g4brb 9JLJXanDDw8enyXOxOQG4VjLOVBA48U2xfYOQxei4Veat75blsetkOJmBhV/ilvZDcCB jHWCI3ZJ+WiVp3hWn31uoI91Z/FABeBhP32ECR/ZRhFRm1Js0M9mIgxeHkeM9iTndoOd T3Bw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766581740; x=1767186540; 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=zYyVRjly71IVaO9XpSMOkg3chszPFkxF2ByaNmXFw0U=; b=fpk1JbJkXf2KI1rgm/viSw0BU+Xnq9yoiHdZPa5P9KLhwHjgCfVdm5b1q589QvPBXk v86PGFg6J9uh3D9/ZupjtW0Dk18DU6StT15XFYfDoi2qIdI5CMB7TP8ky7Vpi9a7CQby 60xcSjNm73OdlOJbJ/KtX3EqUKkiSFawL9n0ixQPlrCNP5O2Uct85i/d7e9Gb0AihXp3 WWaWF5C6fwqPx9A/2Hs3JzCLawl1p3Gvn7FSqRnn72sISpXGfDrnI00NNIofBstyb9NJ hJEXKdlnBaFYZFgk7mXywHk1GfmtV+8nM73MOvC832zsKiUsI17f8ykabW7SqniCrP9L izmw== X-Forwarded-Encrypted: i=1; AJvYcCXD/Jeoxnh4j/bG1CoHn1tf60d9bIxVY0wVNMXhXXV4HXYO3lSzDcVa7WWLLX0DzKtfbxCV3esbUQif9bo=@vger.kernel.org X-Gm-Message-State: AOJu0YwYKSLXreyEGQMk2t4ziiwtynoNJZqy2cLrGbGvqcmmrle/izLM HFCKus5kGWJ6Fejm/ozUrxILEBBoFCtirwbPYmN8a7FEzjqHe9qtBg9a X-Gm-Gg: AY/fxX765H7zYl5IwEXrlFZRGjM5saiAjwC1euh2cjC0V94b1eqSbn/0HEuV9ZyF5p4 upj8eTW6dSTMepPev6ehLQeHCaHrArlSxjvNBtqcuPzAhtkhR9DLtosMoh62hz7lWekkJsA/vl0 RJ1n4iRuXjfONUwNLFPwmjtvdX3o6baDHRgjl97+inMQchivQzZI/ddSR0lSH9AKjf/1vEmxsYR 6cOcpMgmbuj2NF5GOj8h4npOoYGVlMSCU41KvHFZ4yoyWNSrT2xyhC+n2QVJ45dOES1ssnqI0kj 0rsRQHIIqflNM8MW0rJbKvBZUn1xGbPXCjOxm4DJTU48jibC/foSUP7yZfKka0Q43Vr3sc4aDWy 6IK1Ij21Xis2X445ryllu7xqaD/vqct9Tm9yzSpu964LmOWQIUhHCNTJJlnBrKOVbiC7va6tHGi KG8lmubcw= X-Google-Smtp-Source: AGHT+IErd7vAfIB+irZQwkzQ1fQaxD1AvOnZrKvCeFIJ2E1PWYMiRCEblW/NltGYCB7XCuuAuIDylg== X-Received: by 2002:a05:6a00:bb84:b0:7fb:c6ce:a863 with SMTP id d2e1a72fcca58-7ff650c8297mr17244641b3a.13.1766581740390; Wed, 24 Dec 2025 05:09:00 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7dfac28fsm16841173b3a.32.2025.12.24.05.08.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Dec 2025 05:09:00 -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 v5 05/10] bpf,x86: introduce emit_st_r0_imm64() for trampoline Date: Wed, 24 Dec 2025 21:07:30 +0800 Message-ID: <20251224130735.201422-6-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251224130735.201422-1-dongml2@chinatelecom.cn> References: <20251224130735.201422-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce the helper emit_st_r0_imm64(), which is used to store a imm64 to the stack with the help of r0. Signed-off-by: Menglong Dong --- arch/x86/net/bpf_jit_comp.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index b69dc7194e2c..8cbeefb26192 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -1300,6 +1300,15 @@ static void emit_st_r12(u8 **pprog, u32 size, u32 ds= t_reg, int off, int imm) emit_st_index(pprog, size, dst_reg, X86_REG_R12, off, imm); } =20 +static void emit_st_r0_imm64(u8 **pprog, u64 value, int off) +{ + /* mov rax, value + * mov QWORD PTR [rbp - off], rax + */ + emit_mov_imm64(pprog, BPF_REG_0, value >> 32, (u32) value); + emit_stx(pprog, BPF_DW, BPF_REG_FP, BPF_REG_0, -off); +} + static int emit_atomic_rmw(u8 **pprog, u32 atomic_op, u32 dst_reg, u32 src_reg, s16 off, u8 bpf_size) { @@ -3341,16 +3350,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf= _tramp_image *im, void *rw_im * mov rax, nr_regs * mov QWORD PTR [rbp - nregs_off], rax */ - emit_mov_imm64(&prog, BPF_REG_0, 0, (u32) nr_regs); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -nregs_off); + emit_st_r0_imm64(&prog, nr_regs, nregs_off); =20 if (flags & BPF_TRAMP_F_IP_ARG) { /* Store IP address of the traced function: * movabsq rax, func_addr * mov QWORD PTR [rbp - ip_off], rax */ - emit_mov_imm64(&prog, BPF_REG_0, (long) func_addr >> 32, (u32) (long) fu= nc_addr); - emit_stx(&prog, BPF_DW, BPF_REG_FP, BPF_REG_0, -ip_off); + emit_st_r0_imm64(&prog, (long)func_addr, ip_off); } =20 save_args(m, &prog, regs_off, false, flags); --=20 2.52.0 From nobody Sun Feb 8 07:58:41 2026 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8BE89340A57 for ; Wed, 24 Dec 2025 13:09:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581755; cv=none; b=XcU9/fNEaIiuAr9tqzKAgt3bYQVApQnYuHnr6mrFwMKQMKQk0rjtJdS327bYWJqpwy6nHOiHvkjcAfJlzfT53T6znZa8aVv5ljQIouNnu2vRz5fbbFrTh1YeFLrizAnpoXO93tOuIgxK2hqe51AL9lQKaXXoZ6rySFHupKcXse0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581755; c=relaxed/simple; bh=BuxKbcBrUFkCQTWuuGPow1baEXCjbvqcptp8SFeoSZk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oAmg/iTekDF3dnBDMbL6heH7C4T3CxeH0PsdNKyB19pAfZdetyMtDdG4bwxrweybdkLnfsHL9d9xWPIA1NlVmoWX1a3rYjholzUXtBMceKaFQk3mrjGptuwVhpzGqZk3ZQBhPePdqKxVlAX3FVOotxkGFmPjhwWuPvw3jmIAJyg= 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=LodgkAyF; arc=none smtp.client-ip=209.85.210.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="LodgkAyF" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-7f89d0b37f0so3501794b3a.0 for ; Wed, 24 Dec 2025 05:09:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766581753; x=1767186553; 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=MkdxNwrKHZWUlyJi0H/o6p25K3Dv2TUlLie18QFj2IY=; b=LodgkAyFvwshuW3a4wofzL1emlX8STwJ47qAEUjimgnWJyiILWsOPxfX/3GNkRZfu8 eNTlVIa9ks4j3CrxkWt0T3G2mL793BUDNLG2soVf7SzCdD0oSz20Fs8WEQv+Ri51gMLv 0aKo4Jb1vbg41UbKA8DeYrJ+qcry3ga4QQWZBbnrGuCGcVsQaHZ//CZJ+HeMLSAY31WI XKUa5D28J8SADrJ98NIJWNDsXX9TcL0gdA977aHdOnyr/w8If78soQ8axjud69KtMLPC FBmmE+z0xCllaf8Vov1+hmbZXdbTmACJwI7t2LYKx6v2cnh8MbkBw1bSbtWm913gkuqP bBfQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766581753; x=1767186553; 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=MkdxNwrKHZWUlyJi0H/o6p25K3Dv2TUlLie18QFj2IY=; b=fmQ7QHx56mjQ1yM6sqeHSP+XoicbvARgheQLUDjHQ2AXtc8ZgBAmdEUIeXC8fOz81H L+zK6eo71iksP8tmnEq9UL12uWyrbICkBFxJ6c/S+k2c6fYcv4q4aDiRh9NBshXdFgPw CAZiiiRk/Rzgx4ROMGg0MhqFKhFnjklgcb4krv2+sk4vn4aIVX0IMaRID0njG+xMxufF 248P6ji1Zv29/87MdyjYvmeCu16ihEt8TqBs2DNp3s8F2PjG9PxtbMp/sZ7p8WBcoje5 1hZWefxgyBfcaLKwf6hxgU2oEAns3oG71Q7iMY3f6yJl7sqO1Uu/6QtGo6l9T9TmDgV8 yRww== X-Forwarded-Encrypted: i=1; AJvYcCW1NKZiX6zT/V1farVCc20QXViHgr0/y+8foWHryGvXRBvYCyCKuEWwXfkr0tZRXDNemLvY++9tcvUX9uk=@vger.kernel.org X-Gm-Message-State: AOJu0Yz/u6/qbuGLUVD/gxFEaRSz6EcKV4de1CzYwxuuu6nTpLDcOa/d Z8/7DrBYR0Rp6FD+yP3K1MXgHAtAf+VtPgfsevMqD9VqbpkniJdeZy3n X-Gm-Gg: AY/fxX405B5KFSb0/BHO6Bv2tfiDYgoyevcUAA4+S6MXBqOTb+mkbKP6Dq20mo3zsKv PgXSgsRKiKkHfjW42V5J85JvOtEdO3Y/ti1YCQDs9g/sKqVa8WglrbRN5RkPO82oc3txfLCrft/ isbC+ndhApdXPE37NTe1DT2iI3d/P56h+9P2FGVxwmpgnmMeu3oCCKH3HjUQHcxtysYrhtWrtPT r4/qQCH1Xg8wqvMN/JehavPMIfcDMXe4wkygYghQF5CLjPbY52f2gEFHdXtr/ACeK8Qe+DqiYi3 W7Rivs41VLqkNNOkQrL0xLCMNGkrsPAV69bqd6N6gtW6v7BLqYp3oiIAGtLcWh3dEWKfM3XzWIP h/ugVk1bJKXFsaITv4x2n2nkHafBDXQ1cEW7Bvfe0hrO8YelKTd7Ty45C2vdduUYLrRkPC/LNbY 5lHh4t6tE= X-Google-Smtp-Source: AGHT+IEvbeG5Y7HTA0JguFBt4RGFYeAY9Iecwxakklqa5khgBk4AEDlJru0Y7JITWH5XUCwrC1OI9Q== X-Received: by 2002:a05:6a00:3404:b0:7a9:7887:f0fa with SMTP id d2e1a72fcca58-7ff5284c3famr18711266b3a.1.1766581752881; Wed, 24 Dec 2025 05:09:12 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7dfac28fsm16841173b3a.32.2025.12.24.05.09.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Dec 2025 05:09: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 v5 06/10] bpf,x86: add fsession support for x86_64 Date: Wed, 24 Dec 2025 21:07:31 +0800 Message-ID: <20251224130735.201422-7-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251224130735.201422-1-dongml2@chinatelecom.cn> References: <20251224130735.201422-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add BPF_TRACE_FSESSION supporting to x86_64, including: 1. clear the return value in the stack before fentry to make the fentry of the fsession can only get 0 with bpf_get_func_ret(). 2. clear all the session cookies' value in the stack. 2. store the index of the cookie to ctx[-1] before the calling to fsession 3. store the "is_return" flag to ctx[-1] before the calling to fexit of the fsession. Signed-off-by: Menglong Dong Co-developed-by: Leon Hwang Signed-off-by: Leon Hwang --- v5: - add the variable "func_meta" - define cookie_off in a new line v4: - some adjustment to the 1st patch, such as we get the fsession prog from fentry and fexit hlist - remove the supporting of skipping fexit with fentry return non-zero v2: - add session cookie support - add the session stuff after return value, instead of before nr_args --- arch/x86/net/bpf_jit_comp.c | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index 8cbeefb26192..164c745d913c 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c @@ -3086,12 +3086,17 @@ static int emit_cond_near_jump(u8 **pprog, void *fu= nc, void *ip, u8 jmp_cond) static int invoke_bpf(const struct btf_func_model *m, u8 **pprog, struct bpf_tramp_links *tl, int stack_size, int run_ctx_off, bool save_ret, - void *image, void *rw_image) + void *image, void *rw_image, u64 func_meta) { int i; u8 *prog =3D *pprog; =20 for (i =3D 0; i < tl->nr_links; i++) { + if (tl->links[i]->link.prog->call_session_cookie) { + /* 'stack_size + 8' is the offset of func_md in stack */ + emit_st_r0_imm64(&prog, func_meta, stack_size + 8); + func_meta -=3D (1 << BPF_TRAMP_M_COOKIE); + } if (invoke_bpf_prog(m, &prog, tl->links[i], stack_size, run_ctx_off, save_ret, image, rw_image)) return -EINVAL; @@ -3214,7 +3219,9 @@ static int __arch_prepare_bpf_trampoline(struct bpf_t= ramp_image *im, void *rw_im struct bpf_tramp_links *fexit =3D &tlinks[BPF_TRAMP_FEXIT]; struct bpf_tramp_links *fmod_ret =3D &tlinks[BPF_TRAMP_MODIFY_RETURN]; void *orig_call =3D func_addr; + int cookie_off, cookie_cnt; u8 **branches =3D NULL; + u64 func_meta; u8 *prog; bool save_ret; =20 @@ -3282,6 +3289,11 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im =20 ip_off =3D stack_size; =20 + cookie_cnt =3D bpf_fsession_cookie_cnt(tlinks); + /* room for session cookies */ + stack_size +=3D cookie_cnt * 8; + cookie_off =3D stack_size; + stack_size +=3D 8; rbx_off =3D stack_size; =20 @@ -3372,9 +3384,19 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im } } =20 + if (bpf_fsession_cnt(tlinks)) { + /* clear all the session cookies' value */ + for (int i =3D 0; i < cookie_cnt; i++) + emit_st_r0_imm64(&prog, 0, cookie_off - 8 * i); + /* clear the return value to make sure fentry always get 0 */ + emit_st_r0_imm64(&prog, 0, 8); + } + func_meta =3D nr_regs + (((cookie_off - regs_off) / 8) << BPF_TRAMP_M_COO= KIE); + if (fentry->nr_links) { if (invoke_bpf(m, &prog, fentry, regs_off, run_ctx_off, - flags & BPF_TRAMP_F_RET_FENTRY_RET, image, rw_image)) + flags & BPF_TRAMP_F_RET_FENTRY_RET, image, rw_image, + func_meta)) return -EINVAL; } =20 @@ -3434,9 +3456,14 @@ static int __arch_prepare_bpf_trampoline(struct bpf_= tramp_image *im, void *rw_im } } =20 + /* set the "is_return" flag for fsession */ + func_meta +=3D (1 << BPF_TRAMP_M_IS_RETURN); + if (bpf_fsession_cnt(tlinks)) + emit_st_r0_imm64(&prog, func_meta, nregs_off); + if (fexit->nr_links) { if (invoke_bpf(m, &prog, fexit, regs_off, run_ctx_off, - false, image, rw_image)) { + false, image, rw_image, func_meta)) { ret =3D -EINVAL; goto cleanup; } --=20 2.52.0 From nobody Sun Feb 8 07:58:41 2026 Received: from mail-pf1-f193.google.com (mail-pf1-f193.google.com [209.85.210.193]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7605233C195 for ; Wed, 24 Dec 2025 13:09:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.193 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581767; cv=none; b=VDrz1QXL+fuZ3f9iHUyp4gvq3gpmzhyp3fSE4L56+CIHDmXcEIyg3pAyuOkHrhUZNv+KrU5KutjoBdq9xL0b5/GkbRG7ThI7ON0FNobBi514fU7A6XxRtXeEZUr6R86kR90qEPrRqRtSWxvRgt7pg4+DITQBXDxK1qNReL3e2JI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581767; c=relaxed/simple; bh=PCsJiUv8dhKkVEc9Gphzr4Abd9FE3cPci4dMk5dyyfA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NtAPv+1gavFJIwUaQ/YEtlak/rs8GmqDCoh0Hbvh/hNqWsV8OfCsfu6uAlIWDWJLlUrg6kwFmZT/K3n4kyPGNLtzdLWccC/TNnE0sk9uqd/hwsr3vlO33DIjmKYizj8+t/dpCsm86QKYUPLRBcHalp4nNz4K0lXPNgC5LXmfaZY= 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=aO3Zi0s3; arc=none smtp.client-ip=209.85.210.193 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="aO3Zi0s3" Received: by mail-pf1-f193.google.com with SMTP id d2e1a72fcca58-7aab7623f42so6757396b3a.2 for ; Wed, 24 Dec 2025 05:09:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766581766; x=1767186566; 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=0kE5Q7mze/2WJ5b9UVlr1RR/p46+sCrbeQJO2GbpeOw=; b=aO3Zi0s33vMT33NPLFFSTa6glR5hvi2n/qtuTc8vezbRhebx97WG9NlZg837Q95RLc L/k/7bGA01x+gaEj5e7umjxav9fg5PH61dzab5vlXVD4okWD1mipbVfKAT3XpLbP4khn sF0F66ohWG9wShjG9XyU3EZrg+cpkmnvIbfkCQUcNHJYGB2zTL0K2asele5u8dPI6/fT 6OR4iHsDJEj18t6ZN2fAv8h/wcPv9OYHL4exDFIc61rbYa0f/VTd6ierIuXIVbEXfzT/ AkEV8h0XCos+YYmGSOt2ND3MAJcQ6f6O+EBlwXHm5JrAnljy1Y4rIvbpJhHc+JNzW9Ou 1fsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766581766; x=1767186566; 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=0kE5Q7mze/2WJ5b9UVlr1RR/p46+sCrbeQJO2GbpeOw=; b=iEuKtTZeMfRVqETY3IzCWE+Kc5fC4WxCpFBmMzBDktvbxc+xPriUlQ1PxoyUBNpyce moheknBI2uVkKs4ntE/bmh2qw/72uqhME7HrR1TdK5DBKzTpjAgkMjUOTyW+36t2FCme ThIUfRHdL+ojP+PT53gSe2bzhqsSLWdDJ7FzfHSX7Nl2CktHRvDFVBGChqpSeucSU0wQ NZ8lLHiWeV1C+Mh5hqK5sLAbYQU0hDb+C+kPza8X9QgLqIOiaHdpvUHxjrzUL6pMajiE RWAPRSFk5jaEqqacXA7HH3gHAyxLUsVoSUvv82hmPTOWF5ygVGyMnPyUHZ/bvzIX0kIF tDxg== X-Forwarded-Encrypted: i=1; AJvYcCW33cRUrsIsJAOTosu03ShVvegRlchJK/fts5hSTo7IGvb/bSUnqkw+dQMu/EZ1wygRAbVRkL788JSUTBQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yz04VJAcuiVmYZLuzFKny98XU/523loMZnfFCWT90t9OsFdcuos DMpHBsbRij3r9XO5txAkSugCYFQLT2l+4nwCxVQ6oQZtoAFS4g2P94mv X-Gm-Gg: AY/fxX5EKaQm4CTVyaEgLyCYxEUnOx75VQCVZ0JDgOgDBOHhDvgWeJKGNmZ1aavIvZB BNQtd8YtKyuMO3gg2lZ5QYKD4k+mX09K+8hVSpW93s+D0u0eUZfDA2m0/8zgfHJsgkHLzNqb0xp 5LfeMK1Obf9XMq72YLbsAn1/XZeq0Kw2V6ych7LHCue0h15yGUHs1Lbk5Q9O2v+TXuVjNhkZpbW HNHZnIJH+hw0ETM7wjh4f+Ededys1BHKVcPBvCmMICMRXt7LHHTcyQGctF84XLjrd2gWh4qL6LA lRDIv9zmDnbxTSJVIrQUwzz3QnDSDYglpF0juQJWnewqM0sB6yfNPhO37IQyDYheEq5KDgAVBWp OTMq/3VxjTAVtIBmG6t5cRg+CiXLK1HN6EmGTH8KTEVyNsQWyjIRFIHqrv7BybxgHR2/uW0v6kk qmmpYnntJQq4lqz33NOA== X-Google-Smtp-Source: AGHT+IHgHRzAHO1F91ZV8YBf7P6BwsKNZFWVXB/JIdxB+nDTG20q6gRPHy540gxcdU8XsyiAMYLSbg== X-Received: by 2002:a05:6a00:288f:b0:7f7:13bb:8f20 with SMTP id d2e1a72fcca58-7ff6667c961mr13847071b3a.50.1766581766005; Wed, 24 Dec 2025 05:09:26 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7dfac28fsm16841173b3a.32.2025.12.24.05.09.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Dec 2025 05:09: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 v5 07/10] libbpf: add fsession support Date: Wed, 24 Dec 2025 21:07:32 +0800 Message-ID: <20251224130735.201422-8-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251224130735.201422-1-dongml2@chinatelecom.cn> References: <20251224130735.201422-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add BPF_TRACE_FSESSION to libbpf and bpftool. Signed-off-by: Menglong Dong --- v5: - remove the handling of BPF_TRACE_SESSION in legacy fallback path for BPF_RAW_TRACEPOINT_OPEN - use fsession terminology consistently --- tools/bpf/bpftool/common.c | 1 + tools/lib/bpf/bpf.c | 1 + tools/lib/bpf/libbpf.c | 3 +++ 3 files changed, 5 insertions(+) diff --git a/tools/bpf/bpftool/common.c b/tools/bpf/bpftool/common.c index e8daf963ecef..8bfcff9e2f63 100644 --- a/tools/bpf/bpftool/common.c +++ b/tools/bpf/bpftool/common.c @@ -1191,6 +1191,7 @@ const char *bpf_attach_type_input_str(enum bpf_attach= _type t) case BPF_TRACE_FENTRY: return "fentry"; case BPF_TRACE_FEXIT: return "fexit"; case BPF_MODIFY_RETURN: return "mod_ret"; + case BPF_TRACE_FSESSION: return "fsession"; case BPF_SK_REUSEPORT_SELECT: return "sk_skb_reuseport_select"; case BPF_SK_REUSEPORT_SELECT_OR_MIGRATE: return "sk_skb_reuseport_select_= or_migrate"; default: return libbpf_bpf_attach_type_str(t); diff --git a/tools/lib/bpf/bpf.c b/tools/lib/bpf/bpf.c index 21b57a629916..5846de364209 100644 --- a/tools/lib/bpf/bpf.c +++ b/tools/lib/bpf/bpf.c @@ -794,6 +794,7 @@ int bpf_link_create(int prog_fd, int target_fd, case BPF_TRACE_FENTRY: case BPF_TRACE_FEXIT: case BPF_MODIFY_RETURN: + case BPF_TRACE_FSESSION: case BPF_LSM_MAC: attr.link_create.tracing.cookie =3D OPTS_GET(opts, tracing.cookie, 0); if (!OPTS_ZEROED(opts, tracing)) diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index c7c79014d46c..10f96e8f8ce1 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", @@ -9853,6 +9854,8 @@ static const struct bpf_sec_def section_defs[] =3D { SEC_DEF("fentry.s+", TRACING, BPF_TRACE_FENTRY, SEC_ATTACH_BTF | SEC_SLE= EPABLE, attach_trace), SEC_DEF("fmod_ret.s+", TRACING, BPF_MODIFY_RETURN, SEC_ATTACH_BTF | SEC_= SLEEPABLE, attach_trace), SEC_DEF("fexit.s+", TRACING, BPF_TRACE_FEXIT, SEC_ATTACH_BTF | SEC_SLEEP= ABLE, attach_trace), + SEC_DEF("fsession+", TRACING, BPF_TRACE_FSESSION, SEC_ATTACH_BTF, attach= _trace), + SEC_DEF("fsession.s+", TRACING, BPF_TRACE_FSESSION, SEC_ATTACH_BTF | SEC= _SLEEPABLE, attach_trace), SEC_DEF("freplace+", EXT, 0, SEC_ATTACH_BTF, attach_trace), SEC_DEF("lsm+", LSM, BPF_LSM_MAC, SEC_ATTACH_BTF, attach_lsm), SEC_DEF("lsm.s+", LSM, BPF_LSM_MAC, SEC_ATTACH_BTF | SEC_SLEEPABLE, atta= ch_lsm), --=20 2.52.0 From nobody Sun Feb 8 07:58:41 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 EA3453451A3 for ; Wed, 24 Dec 2025 13:09:40 +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=1766581782; cv=none; b=GELJ+fGyJyQ47iZb7f6I5hkY6Cl7Wt0RijsFvKl1hKQ6B7LZ+UqDwFrSGMYmJwTUeeVSSRnYEXhmizZFDBJR9xLqp0DpphmAcx0B3C6PtAjIpx0OVa03Oe2J3r73nUuu8Dkc4F6tzbFRzygVl/vomZo8p0O5dKfDSwhUxP5gYgg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581782; c=relaxed/simple; bh=Bmazx6R7HTgrZAAci2Hgxnnq07VZy40dkV/5oC73DrI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DAXoUaIn2Yjl8k7/Ur8hsqHVE4bQ1QYg6cV3RWnJHV4eqF5+1/2UkprskB37x+uLXHoqyNw51wxNKyke9t162xgowxqJOP/St0UKxkSomt3IzjkXnjsWoAcVGEAY+i0H73VbadAWBlYlefLS45ZXy4/cFcdSZksKMP/WYT4L7yA= 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=EvW/FKtc; 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="EvW/FKtc" Received: by mail-pl1-f196.google.com with SMTP id d9443c01a7336-2a09a3bd9c5so52546625ad.3 for ; Wed, 24 Dec 2025 05:09:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766581780; x=1767186580; 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=P/XzCDYEI0ITxaGC+HfLOBIfCYLkIH8T7xQ7CvHDcOk=; b=EvW/FKtcSDvLvFDsSsdODm5X0k7pjEPthbe2DOYZartxQGRh5gZnEma0WeOxWvr9W6 nQhNKK9Pcb2t4mQ2VEeEmAPFuKpz+rDIu8aEp1uyiicmUlZ3vwsskuLBKX3JQCQ/NySD 9qq9+XQGQZsNlYwTtXUFjTare+XN/L6m6PgU4o1mjip7Zli84XXKPj5AJ5Mhh9m21vSU n0RXTRoxijPws+rsVSCWK3aZet3siDS2JKbwIYOj8uphJUmvUbY9DljRiKobgPap64dZ gcanwLlEisEHvAWY4HalLWTS9jPtQhBAUYg1U4QzNaZECqhTCtcrHbWko19a86gJ4eLu 3C9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766581780; x=1767186580; 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=P/XzCDYEI0ITxaGC+HfLOBIfCYLkIH8T7xQ7CvHDcOk=; b=SMcf5yR07+HYgqM0kNM7bkyw7qgiBbnEleCgfc+RTFuWtrGH37gcofhZMJ4UDQzPpk rh7A89nCqWNFAokm0MlHajgwT39tEAkurjxvOIOmNp337NKYKhzv0wUoMrztIGW/9jVB Sb05btM0MW9QzgGer7bzAakSiTYuu42VIH8iEsiSX3A8oIF9DMI5cdvCryY3uoZuD0th 3BdfDllaI4BQQjmTfn95ecotLqL3zFMTKCe3MPHh0FXgI0O2hWYf58JwUTOYsgg86NE9 xt9kXJo7jgONfwSmzJGMfL96O1DCfruHl3P5+o1kOnnYhVK7GAdVuHhocF3pw1CC0EQD k5og== X-Forwarded-Encrypted: i=1; AJvYcCUsfE76hErx6NiYYppdcrzqMUrK1RzWYkFt0d0IV3HUH5Ve/VqAD7JUZl94aZs01xPZN2t4i/MkYtTauf8=@vger.kernel.org X-Gm-Message-State: AOJu0YywAQujMMmTa/QtqY9lXgNxkuTsrpbjAZZBfqy0v7c84jx2MDWu 8uBPMsG0L/UFskAjdoMfI44FWooOTZ4OVCnTGCI38TWoVutRQCsb2EB4 X-Gm-Gg: AY/fxX78Gb9sDgfku3XiLpJeOhgR/k64rWo0GYsjBIxXKzLCQG/HL0yZ/uqw3ovF+nt 9wQunvu3YnfEGNwE6DEoGc8NyEYE2fYxL41DI8j8eSBAsmyKyRYe2XVh+3xiTMLNdWUFWvuWpBR 9+vY1Vix9a5aMUO/UaIEhC1Bctt+cyjg5W/aiA1vyaxn67jxw9KcjfCT8joheatYlrN//XL/ITT mKuJwUhrE4R8ipaR04vgUjvfiUMZL4Q5hMvI6M6PmDEq7OTMshKagLi1p1MMBA52i88rRhQ+jpY +uHx/zfudYCi1a8hp5h+I8ZgRJgerS+cSrkYnbySKuwX4bx9tO3PMQowts0XXmxAemuDXTVnxdp 83U0kvrgLk2lpV+whRGfvTsF2Mx+9VoXqyBoCJlb/H7FeJjyH3DCjN9i99AyHNceVEyanMSkRnn pS/2ThoHctHg/BTitNZg== X-Google-Smtp-Source: AGHT+IGf1imjHRE+ghCg/KJNQShasOaQNtbDozqmyux9+RUBrJ9Pqo/VwgFHn/aR49SnKMnCqVtx3g== X-Received: by 2002:a17:903:4b28:b0:2a0:ed13:398e with SMTP id d9443c01a7336-2a2f2a4f222mr181527185ad.49.1766581780271; Wed, 24 Dec 2025 05:09:40 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7dfac28fsm16841173b3a.32.2025.12.24.05.09.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Dec 2025 05:09:39 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v5 08/10] selftests/bpf: add testcases for fsession Date: Wed, 24 Dec 2025 21:07:33 +0800 Message-ID: <20251224130735.201422-9-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251224130735.201422-1-dongml2@chinatelecom.cn> References: <20251224130735.201422-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_fsession_is_ret() is also tested. As the layout of the stack changed for fsession, so we also test bpf_get_func_ip() for it. Signed-off-by: Menglong Dong --- v3: - restructure the testcase by combine the testcases for session cookie and get_func_ip into one patch --- .../selftests/bpf/prog_tests/fsession_test.c | 90 ++++++++++++++ .../selftests/bpf/progs/fsession_test.c | 110 ++++++++++++++++++ 2 files changed, 200 insertions(+) create mode 100644 tools/testing/selftests/bpf/prog_tests/fsession_test.c create mode 100644 tools/testing/selftests/bpf/progs/fsession_test.c diff --git a/tools/testing/selftests/bpf/prog_tests/fsession_test.c b/tools= /testing/selftests/bpf/prog_tests/fsession_test.c new file mode 100644 index 000000000000..83f3953a1ff6 --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/fsession_test.c @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: GPL-2.0 +/* Copyright (c) 2025 ChinaTelecom */ +#include +#include "fsession_test.skel.h" + +static int check_result(struct fsession_test *skel) +{ + LIBBPF_OPTS(bpf_test_run_opts, topts); + int err, prog_fd; + + /* Trigger test function calls */ + prog_fd =3D bpf_program__fd(skel->progs.test1); + err =3D bpf_prog_test_run_opts(prog_fd, &topts); + if (!ASSERT_OK(err, "test_run_opts err")) + return err; + if (!ASSERT_OK(topts.retval, "test_run_opts retval")) + return topts.retval; + + for (int i =3D 0; i < sizeof(*skel->bss) / sizeof(__u64); i++) { + if (!ASSERT_EQ(((__u64 *)skel->bss)[i], 1, "test_result")) + return -EINVAL; + } + + return 0; +} + +static void test_fsession_basic(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open_and_load(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open_and_load")) + goto cleanup; + + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_attach")) + goto cleanup; + + check_result(skel); +cleanup: + fsession_test__destroy(skel); +} + +static void test_fsession_reattach(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open_and_load(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open_and_load")) + goto cleanup; + + /* First attach */ + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_first_attach")) + goto cleanup; + + if (check_result(skel)) + goto cleanup; + + /* Detach */ + fsession_test__detach(skel); + + /* Reset counters */ + memset(skel->bss, 0, sizeof(*skel->bss)); + + /* Second attach */ + err =3D fsession_test__attach(skel); + if (!ASSERT_OK(err, "fsession_second_attach")) + goto cleanup; + + if (check_result(skel)) + goto cleanup; + +cleanup: + fsession_test__destroy(skel); +} + +void test_fsession_test(void) +{ +#if !defined(__x86_64__) + test__skip(); + return; +#endif + if (test__start_subtest("fsession_basic")) + test_fsession_basic(); + if (test__start_subtest("fsession_reattach")) + test_fsession_reattach(); +} diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c new file mode 100644 index 000000000000..b180e339c17f --- /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_fsession_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_fsession_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_fsession_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_fsession_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_fsession_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_fsession_is_return(ctx)) + test6_exit_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + else + test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; + return 0; +} --=20 2.52.0 From nobody Sun Feb 8 07:58:41 2026 Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EDC01346FB7 for ; Wed, 24 Dec 2025 13:09:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.195 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581796; cv=none; b=sDV5DYpvS2pswG9mMBxaY/OEofOjoB2AP/1/g+p2v+3pxOxHw+N6J0+fiLhT1pnNnNMZBVOSGEh3jQeldS/H4ZGf0q62XeX68SzN0Kbn5KGegDu9xvpkM7Bx/kuo+jwOAzTXLjK4pyBDqW4ND86sCZL+JxgmtPFE80nEsxNp9Zs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581796; c=relaxed/simple; bh=7SDJuFphpW3+olwFXj0xPVEig/npNUEHxEDid1Ga1WY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LtiyQQoPlciwNp0dNwvkPO8x1PF0fONftiU/lyPP6joXq+1uNdhfqyZkJtQQ+MDr/r+ZyEXlOAqnRjIIKiaVUVzyoeLsj5VKAJlUGSfJ3elx+9GZG/yLxlTt8buOvwQ+fg8Cq5cDOCZKTI9b8sUuRQ53nWJAARKwH+q/vkyyfVs= 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=e54ujjhf; arc=none smtp.client-ip=209.85.210.195 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="e54ujjhf" Received: by mail-pf1-f195.google.com with SMTP id d2e1a72fcca58-7ba55660769so4763661b3a.1 for ; Wed, 24 Dec 2025 05:09:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766581794; x=1767186594; 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=h66nM9SmW+4KvKNcMfrx/eUWGHnc/5Crgy2rlwqjCZQ=; b=e54ujjhfhAfZrgyRuUUB/fnLE+/329MHOKPZK86MWG16vin7+5wg9p1MIkUQblZtxe iC1avUf8lM8HmWD12FBShl07YQm7NJypN/eDozi6B7OtfzPfe5SSEkFW1XSm5zf7n3lW bFNZjTEVWxhWHCwn/NzlTKCNySAyF/V3sF9XiFDAtYjAO+u2cIxrSSmFBqDlxD35J4Ej 4RuCynPLKI6cZpM6JFBnf9P71wuqmcNrc5oJofCB3HJrSEOgCGUvm7ZCvtuKrVRo66nI 5E6gG3TY36wKHDnJztsA6tu6D8M53gkvlAtPSyAjqXgBYWjJu4Sj2TVbwZnHTfRxHvIq eOzA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766581794; x=1767186594; 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=h66nM9SmW+4KvKNcMfrx/eUWGHnc/5Crgy2rlwqjCZQ=; b=NWQOdFvHyUnUZ5+9mmLWPyaAlDJMGzWbfi9GybSMnYFQZGWTJYdr6+2GjDSwc+dv3Q jz9pVuc5Wy4Nafkm+gCOoKVXZSe+oH9MXXPyv5b1KETFszTfQ6d6EfQkqJ5sG+IP/J3e KQsw8gn8zVRdEtHnu+R8BdzuFhtbXEodEjMWf4olF0mheFtVVsfNbjQSRl2plHjGwIf0 lTeZBhaODjQ4kUWTKa/fz0g+L7pl0C2Qrk1yfyx5woXSLsKgpIeyGPAMDkDj8PEvBOcO KxJ+XKDbYwaXm3K6T+qk489CUVOPoCJWc+Fzh3Uif+OuEBpZ0s4edj4jorEYwd4cWSCq LcLg== X-Forwarded-Encrypted: i=1; AJvYcCXoooTrnCgZqSpkbxuJfjuZZNlSbkYjMhwI6f/DT72xueCOVnpQFmivWMC1s4EMh9eXlKHIuhaLCHY6mdw=@vger.kernel.org X-Gm-Message-State: AOJu0Yy6yy5GI7FS3ywzPTRaRTPAqnbkzwVF5PWbqYi9GqAu2fV95FtE g6YZW935t/hMrLA79nQ6LBwBLAiQBdxV8JvZW+tHaCrxuhietFqXu7OL X-Gm-Gg: AY/fxX6vz25NhasBlyklN9h5k+VEx4VcmRnyMw4zKhP0fCrI6lG3ZISn3V/W6pxlwce m6UMCOOyMM48HwkGykcgpzzLUcHNybNd5P5oa/9PkTemo6GegzTuWwaV9yFEkV4/2CFhOplriU/ NpztrFt1EvhizCkIcIU8fIOe2QVwNtVHBmwjtcnOKrcr+NtMIHjQ/5w3mC8soNg1quK58wYzZJF Rn229a0hyHYItyYMmN6jmn8u++Rt52YUEzGzOchdqtVIMVtjJjZFcYMJGwzvadTQA/vtDCWRG09 jJIsE1C8qTKbkwVEr8uLTaEM5ZHKvLXxKndRDQJh8JHAW4cIjmatAOORIlhfZz8RmoTog3hUlZi dbcwFsOpACH0voOQmBl4O3ZhdJ6c1kfct+vp22wNfWJ3TmD5x0mvCTc8zV9/FlNlhz31eGIeFry BN20wXXFI= X-Google-Smtp-Source: AGHT+IFg2dw1lbCQhvhHSUK/xEBgEMEUo3jTVgV+JCGMWjyZREF95HQ3ZyvRsYpfI/0QHSvjsunkAA== X-Received: by 2002:a05:6a00:1ca7:b0:7e8:4471:8dc with SMTP id d2e1a72fcca58-7ff66e5d527mr14511852b3a.61.1766581794132; Wed, 24 Dec 2025 05:09:54 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7dfac28fsm16841173b3a.32.2025.12.24.05.09.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Dec 2025 05:09:53 -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 v5 09/10] selftests/bpf: add testcases for fsession cookie Date: Wed, 24 Dec 2025 21:07:34 +0800 Message-ID: <20251224130735.201422-10-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251224130735.201422-1-dongml2@chinatelecom.cn> References: <20251224130735.201422-1-dongml2@chinatelecom.cn> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Test session cookie for fsession. Multiple fsession BPF progs is attached to bpf_fentry_test1() and session cookie is read and write in the testcase. Signed-off-by: Menglong Dong --- v3: - restructure the testcase by combine the testcases for session cookie and get_func_ip into one patch --- .../selftests/bpf/prog_tests/fsession_test.c | 25 +++++++ .../selftests/bpf/progs/fsession_test.c | 72 +++++++++++++++++++ 2 files changed, 97 insertions(+) diff --git a/tools/testing/selftests/bpf/prog_tests/fsession_test.c b/tools= /testing/selftests/bpf/prog_tests/fsession_test.c index 83f3953a1ff6..2459f9db1c92 100644 --- a/tools/testing/selftests/bpf/prog_tests/fsession_test.c +++ b/tools/testing/selftests/bpf/prog_tests/fsession_test.c @@ -77,6 +77,29 @@ static void test_fsession_reattach(void) fsession_test__destroy(skel); } =20 +static void test_fsession_cookie(void) +{ + struct fsession_test *skel =3D NULL; + int err; + + skel =3D fsession_test__open(); + if (!ASSERT_OK_PTR(skel, "fsession_test__open")) + goto cleanup; + + err =3D bpf_program__set_autoload(skel->progs.test11, true); + if (!ASSERT_OK(err, "bpf_program__set_autoload")) + goto cleanup; + + err =3D fsession_test__load(skel); + if (!ASSERT_OK(err, "fsession_test__load")) + goto cleanup; + + err =3D fsession_test__attach(skel); + ASSERT_EQ(err, -E2BIG, "fsession_cookie"); +cleanup: + fsession_test__destroy(skel); +} + void test_fsession_test(void) { #if !defined(__x86_64__) @@ -87,4 +110,6 @@ void test_fsession_test(void) test_fsession_basic(); if (test__start_subtest("fsession_reattach")) test_fsession_reattach(); + if (test__start_subtest("fsession_cookie")) + test_fsession_cookie(); } diff --git a/tools/testing/selftests/bpf/progs/fsession_test.c b/tools/test= ing/selftests/bpf/progs/fsession_test.c index b180e339c17f..5630cf3bbd8b 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -108,3 +108,75 @@ int BPF_PROG(test6, int a) test6_entry_result =3D (const void *) addr =3D=3D &bpf_fentry_test1; return 0; } + +__u64 test7_entry_ok =3D 0; +__u64 test7_exit_ok =3D 0; +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test7, int a) +{ + __u64 *cookie =3D bpf_fsession_cookie(ctx); + + if (!bpf_fsession_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_fsession_cookie(ctx); + + if (!bpf_fsession_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_fsession_cookie(ctx); + + if (!bpf_fsession_is_return(ctx)) { + test9_entry_result =3D a =3D=3D 1 && ret =3D=3D 0; + *cookie =3D 0x123456ULL; + return 0; + } + + test9_exit_result =3D a =3D=3D 1 && ret =3D=3D 2 && *cookie =3D=3D 0x1234= 56ULL; + return 0; +} + +SEC("fsession/bpf_fentry_test1") +int BPF_PROG(test10, int a, int ret) +{ + __u64 *cookie =3D bpf_fsession_cookie(ctx); + + *cookie =3D 0; + return 0; +} + +/* This is the 5th cookie, so it should fail */ +SEC("?fsession/bpf_fentry_test1") +int BPF_PROG(test11, int a, int ret) +{ + __u64 *cookie =3D bpf_fsession_cookie(ctx); + + *cookie =3D 0; + return 0; +} --=20 2.52.0 From nobody Sun Feb 8 07:58:41 2026 Received: from mail-pf1-f196.google.com (mail-pf1-f196.google.com [209.85.210.196]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2BD12348890 for ; Wed, 24 Dec 2025 13:10:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.196 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581809; cv=none; b=Fd4aiM9rI7OgmEeCylfzMgOFpJiu2AcD84yBhoXcCAnMIjPMsTvP72sk1A+7vo8JPpRP4GmQ5piAhBlKOuIoYCvGi6cRFowDqjKacQ8S2zrcN88XWh87cOh2+NVLBO1VP4lzxV0QnItOqJzpLrKZbOGJYauPig0EMeYfzr/BQRw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766581809; c=relaxed/simple; bh=ARq0/QucFj/sxPqr+22ybRos7rUcjBBi5nq/Y4PoAvU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=cJCp/5AEXZGjj0ejbjkyZB6dIs8/+w4nh83qgrfJauMy5PMYWwcA/xpSG9EO70bfyIwD81JrtaCx4SGn+Kxe8F+GLY9wCgH4O1DItpOU2d8whfqoGWaVnIXneqt6xlgxw5fixe1iAVhWGC1NrP2+gAjHnlYBkY75W8laU/r5wgw= 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=CLba7lP5; arc=none smtp.client-ip=209.85.210.196 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="CLba7lP5" Received: by mail-pf1-f196.google.com with SMTP id d2e1a72fcca58-7f0db5700b2so5301680b3a.0 for ; Wed, 24 Dec 2025 05:10:06 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1766581806; x=1767186606; 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=ki8yj47Ksf2sOkp6JBKCA9cB1ptX2Wx6sb0cvY7RlMA=; b=CLba7lP5VtaP3jg1Zy6VGKj+qXkZLv2HZF6wTH5Gx89eYoaKF0H8yXxGIRJt0mpXh9 3nKjeer/OTbF5GqczyIJxslYO4lRGRJ6ditMguttBKCAazkSOwixtLf4hxTpBWm0ilqK xmT0YfaxIe0xWDz40sftNxLYOxVhbqxazqKzt8U0eM++PbjEmMmAFStasJaUrYFMtDA8 tkc+UVy5dpf5zkv6qc8FiVlf+9bgophfRUZ1pI5H1UJBRrwFUrhL2I3wTK9b7bajPqpV OK1TkjHR0SeVsceQ9Q+APS2z5QVlVl+6cYZZaQMT1N+UvjwxkzD2ABmINL9jM29yL+Xr rq0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1766581806; x=1767186606; 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=ki8yj47Ksf2sOkp6JBKCA9cB1ptX2Wx6sb0cvY7RlMA=; b=XmYv1bqRsWGb8egVf2Eyrhldvmgo+u+S9cF+KTA1S1fcWCzRsIsVOWGcDp3jPaF55N OdgQb6i71yGz6cWtWtsXigMhpd9PW5WgxCeNHQTCTbZ5pmoFKapeJYPH8YWQ/ENq3ei0 lXNe6/s/o3fKL1NT1PWyr7h+bF1F2HNlz+4ZuLbSiSJFahmNA9tsGHHuGbnEsDcHHyJs AhZQRus9Kxfcw9ZegoMa5JbQk1pr3Jh3AjxRW6JKQQKd9HS+bGWSFijp0Isbj80RHWVP HFnxvbfXaix4f2DU8FIgClm0wLDJqEVfDR2NAUSD8/sYaKGdS/5OdI/SQa4N11z7sQAB mkiA== X-Forwarded-Encrypted: i=1; AJvYcCXkhQ50NuN3ubPb7Ao5OAmrXTkraRtEHWK80OMtEFp+4V7FIshDEwz8POchpp4VqF8aCtqusC7NHazCEvo=@vger.kernel.org X-Gm-Message-State: AOJu0YzuPq420MlLkFPCXotOXppe5QARhSdaiawl+Cm/5q4pSUlt8v21 sBtL5Jif7fBE2N83Hs/DUVbcOYXTXm9AGflYMfxsJWCyJ6kU66iUwOCA X-Gm-Gg: AY/fxX4xGWajNY246tUXfdYzTSSa74ovrpVnCCv60Nc/dzJEEWQy2M89RxVAA9wVp/d XmkMYj8FqPyUN1EAqkPtPJxMXOxRvnksK30qotfoX40WL6RbcnzAXbaFQ+U4G/p1TCyZlvmi+bZ Ib10DS/Rpx6EZjlBKPEh4U4gX+kxzb3bwKzjcWycNLYuJzbJBBdAb9Mm8NBOgUQ/bboE92anXED FiKo4NU6Z/5R3QvfBcy1ZflW1pi4dkh5pgRQ4tP2l5RKEHaPXpyNh/OlZERGkhSHzEF751hxJDI C96OQkJ3LwMSAbIsNeJGZZRrYySCbHLJ2XoEtzMEa0AJsno8E6reM6eHHD4zVmNuLjvni9ct8fh 48clnkTP+brn4DQR/yMaa9cgd1Y3qM4bw1If1PKwg71AKFIrcB3h5K6aaTFSJpt/+X3FJZpmBxS Bkd0E+YdTXfSLVQuWATg== X-Google-Smtp-Source: AGHT+IEsQ3y6BfEUuR6gPcWe8dQ3+JU2VN7JGTtTSLSdiP5hgCSTgDCloIJCRNjxPEDqHrTRUmPDCA== X-Received: by 2002:a05:6a00:2c85:b0:7ac:3529:afbb with SMTP id d2e1a72fcca58-7ff648e9b90mr15231794b3a.20.1766581806344; Wed, 24 Dec 2025 05:10:06 -0800 (PST) Received: from 7950hx ([160.187.0.149]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7ff7dfac28fsm16841173b3a.32.2025.12.24.05.09.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Dec 2025 05:10:05 -0800 (PST) From: Menglong Dong X-Google-Original-From: Menglong Dong To: ast@kernel.org, andrii@kernel.org Cc: daniel@iogearbox.net, martin.lau@linux.dev, eddyz87@gmail.com, song@kernel.org, yonghong.song@linux.dev, john.fastabend@gmail.com, kpsingh@kernel.org, sdf@fomichev.me, haoluo@google.com, jolsa@kernel.org, davem@davemloft.net, dsahern@kernel.org, tglx@linutronix.de, mingo@redhat.com, jiang.biao@linux.dev, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, bpf@vger.kernel.org, netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH bpf-next v5 10/10] selftests/bpf: test fsession mixed with fentry and fexit Date: Wed, 24 Dec 2025 21:07:35 +0800 Message-ID: <20251224130735.201422-11-dongml2@chinatelecom.cn> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251224130735.201422-1-dongml2@chinatelecom.cn> References: <20251224130735.201422-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 5630cf3bbd8b..acf76e20284b 100644 --- a/tools/testing/selftests/bpf/progs/fsession_test.c +++ b/tools/testing/selftests/bpf/progs/fsession_test.c @@ -180,3 +180,19 @@ int BPF_PROG(test11, int a, int ret) *cookie =3D 0; return 0; } + +__u64 test12_result =3D 0; +SEC("fexit/bpf_fentry_test1") +int BPF_PROG(test12, int a, int ret) +{ + test12_result =3D a =3D=3D 1 && ret =3D=3D 2; + return 0; +} + +__u64 test13_result =3D 0; +SEC("fentry/bpf_fentry_test1") +int BPF_PROG(test13, int a) +{ + test13_result =3D a =3D=3D 1; + return 0; +} --=20 2.52.0