From nobody Fri Apr 3 08:41:37 2026 Received: from out-174.mta1.migadu.com (out-174.mta1.migadu.com [95.215.58.174]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 251B44035BE for ; Tue, 24 Mar 2026 15:05:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.174 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774364737; cv=none; b=CK7dcnc+YbOfJaEQfLASjbdTf/uN4JmiopCkjCFVNt3QTiCNww4bUgmFPZiD4ksT2pjn7yFIaO0aCPYhsUol7i/PV+Qdoa4QX9D76Hofk2N357wXWgq6IDDUB7qD29xxXFJBjD80L24XhaiOukowEfHfImAmhl8fkbYOHHA7NYI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774364737; c=relaxed/simple; bh=1OUXSxliGxs2W5u+A/o5NRDqjqs0xKl/4cLd/mJKN9k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=gAsk3EubPJXhcR4UHX2uvLdxikrXi8rDaXWsM9ioNU8VAE9YUul6HiUPKOgJO2PRAC5/bb2QeOjeaE11PXE471d7PSTnGN5QSGPpjBoFtB4oM86+y4uqcg/Kh8KMwdE0Q1zhKiu0xboFN6QDqMh2Nkrqfo1HREDWjFqCE6H55AE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=R7QRd39k; arc=none smtp.client-ip=95.215.58.174 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="R7QRd39k" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1774364731; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=x8OYL681E9dxdDA5qL/B2G4Dr49rI/KGwvFW7ZoQDW0=; b=R7QRd39kfR8Cv3zgj1iUp2UQOeZb12NKDSqi5aodhoPat9lZEW1gtIRV4Qk5VEVGufz5u8 OouFM4dVUfzcO2aNerjBz3NT7r5gqcSuOPP+Bj8C4w64YhBx9Jn9wGR8bgIVwuLfe8XE0Z QSgqDuAb+UNXZEy/MBY+4j0ZOfkW1yw= From: Leon Hwang To: bpf@vger.kernel.org Cc: Alexei Starovoitov , Daniel Borkmann , John Fastabend , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Song Liu , Yonghong Song , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , "David S . Miller" , Jakub Kicinski , Jesper Dangaard Brouer , Leon Hwang , Toke Hoiland-Jorgensen , Lorenzo Bianconi , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org, kernel-patches-bot@fb.com Subject: [PATCH bpf-next 1/3] bpf: Disallow freplace on XDP with mismatched xdp_has_frags values Date: Tue, 24 Mar 2026 23:04:42 +0800 Message-ID: <20260324150444.68166-2-leon.hwang@linux.dev> In-Reply-To: <20260324150444.68166-1-leon.hwang@linux.dev> References: <20260324150444.68166-1-leon.hwang@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" xdp_has_frags was introduced by the commit c2f2cdbeffda ("bpf: introduce BPF_F_XDP_HAS_FRAGS flag in prog_flags loadin= g the ebpf program"). The commit f45d5b6ce2e8 ("bpf: generalise tail call map compatibility check= ") was to ensure backwards compatibility against tail calls. However, it missed that XDP progs can be extended by freplace progs, which could break the backwards compatibility, e.g. xdp_has_frags=3Dtrue freplace progs are allowed to attach to xdp_has_frags=3Dfalse XDP progs. To avoid breaking the backwards compatibility via freplace, disallow freplace on XDP programs with different xdp_has_frags values. Cc: Toke Hoiland-Jorgensen Cc: John Fastabend Cc: Lorenzo Bianconi Fixes: c2f2cdbeffda ("bpf: introduce BPF_F_XDP_HAS_FRAGS flag in prog_flags= loading the ebpf program") Signed-off-by: Leon Hwang --- kernel/bpf/verifier.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index cd008b146ee5..12330466d58b 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -25519,6 +25519,10 @@ static int check_attach_btf_id(struct bpf_verifier= _env *env) */ env->ops =3D bpf_verifier_ops[tgt_prog->type]; prog->expected_attach_type =3D tgt_prog->expected_attach_type; + if (prog->aux->xdp_has_frags !=3D tgt_prog->aux->xdp_has_frags) { + verbose(env, "Extension program cannot have different xdp_has_frags val= ue with target prog\n"); + return -EINVAL; + } } =20 /* store info about the attachment target that will be used later */ --=20 2.53.0 From nobody Fri Apr 3 08:41:37 2026 Received: from out-173.mta1.migadu.com (out-173.mta1.migadu.com [95.215.58.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A070C406278 for ; Tue, 24 Mar 2026 15:05:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.173 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774364746; cv=none; b=ulJS6FeOMWWrb1KgMRnhyATH/ZgIWCADirCoIJX2qWPmTkh7FRV3TxbnRcurZ600ovEK0x8trBkg7hx6B8YPzGfxiiPDfJjlgr42li4h37sjEnlwrcow6Cu8HO+DDIS6iLROsJVEsKXf44B51TkA4GL24k7wYwHrR9fwGq8w5ws= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774364746; c=relaxed/simple; bh=72MWYsOl5EJ7p0vRG75z7FYU25LgvlWXSOQQdyfu3Pk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=m0j0Z0VGerV7xd9tdb8ELEP9qFUhL1z5/HUlQhfXUB7iqal2SsVp1XtzhDCLLB+OxvYy6w33NjOKLdhcMCvY6ZQEMS+ornV1XswhjoaOmTCUdItsNiseh9ZsX8Mpko5SCjS5rR5GelfMOzNWCiqWcm6HutnLtv/SBdWBXcK8a3s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=uM25/9ju; arc=none smtp.client-ip=95.215.58.173 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="uM25/9ju" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1774364742; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=z/gKO34+ktu/oc3xYij758qT5edGTskb/0z/xbIb/yQ=; b=uM25/9ju5n7ZYSfnHVP0zMNtRl7pjgMO24m7PVMIvee07Yb3GjteQyLaOByPmJNlo0oWWa ubxyTshQ7TTKv8hbqthIYrHkn+oPfkVLQVOYIFBP2ermB789dh8iwwrpb6K0WfLIcLjAwM iw3FUb0h5qFCJQ35JQR/cOSnigmDlz4= From: Leon Hwang To: bpf@vger.kernel.org Cc: Alexei Starovoitov , Daniel Borkmann , John Fastabend , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Song Liu , Yonghong Song , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , "David S . Miller" , Jakub Kicinski , Jesper Dangaard Brouer , Leon Hwang , Toke Hoiland-Jorgensen , Lorenzo Bianconi , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org, kernel-patches-bot@fb.com Subject: [PATCH bpf-next 2/3] bpf: Disallow freplace on kprobe with mismatched kprobe_write_ctx values Date: Tue, 24 Mar 2026 23:04:43 +0800 Message-ID: <20260324150444.68166-3-leon.hwang@linux.dev> In-Reply-To: <20260324150444.68166-1-leon.hwang@linux.dev> References: <20260324150444.68166-1-leon.hwang@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" uprobe programs are allowed to modify struct pt_regs. Since the actual program type of uprobe is KPROBE, it can be abused to modify struct pt_regs via kprobe+freplace when the kprobe attaches to kernel functions. For example, SEC("?kprobe") int kprobe(struct pt_regs *regs) { return 0; } SEC("?freplace") int freplace_kprobe(struct pt_regs *regs) { regs->di =3D 0; return 0; } freplace_kprobe prog will attach to kprobe prog. kprobe prog will attach to a kernel function. Without this patch, when the kernel function runs, its first arg will always be set as 0 via the freplace_kprobe prog. To avoid the abuse of kprobe_write_ctx=3Dtrue via kprobe+freplace, disallow freplace on kprobe programs with mismatched kprobe_write_ctx values. Fixes: 7384893d970e ("bpf: Allow uprobe program to change context registers= ") Signed-off-by: Leon Hwang --- kernel/bpf/verifier.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index 12330466d58b..f8257bae6081 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -6404,6 +6404,14 @@ static int check_ctx_access(struct bpf_verifier_env = *env, int insn_idx, int off, /* remember the offset of last byte accessed in ctx */ if (env->prog->aux->max_ctx_offset < off + size) env->prog->aux->max_ctx_offset =3D off + size; + if (env->prog->type =3D=3D BPF_PROG_TYPE_EXT) { + struct bpf_prog *dst_prog =3D env->prog->aux->dst_prog; + + if (env->prog->aux->kprobe_write_ctx !=3D dst_prog->aux->kprobe_write_c= tx) { + verbose(env, "Extension program cannot have different kprobe_write_ctx= value with target prog\n"); + return -EINVAL; + } + } return 0; } =20 --=20 2.53.0 From nobody Fri Apr 3 08:41:37 2026 Received: from out-182.mta1.migadu.com (out-182.mta1.migadu.com [95.215.58.182]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7AF4D4035A6 for ; Tue, 24 Mar 2026 15:05:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=95.215.58.182 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774364757; cv=none; b=KGpeZCDpnk21ARt+fyxw8mvxk1UzSO1ToTYElkjCF5TIpekVJgAS7qHIkDeweHIqFd4lUt1rm9BhSqTIjX/dOuWIJRzQyplJbkIX85Gz+d94bs1sHsCiRGzLwtZfPFgkC6DVqsAwX19+Iwlgq0jxrYcuRcn2dW3ByjV8AF6SP10= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1774364757; c=relaxed/simple; bh=WpqSBwwF7aTsP4Iam39AX17BQ0WaTx8bICKzwcui9Bw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eCxmptpZXnrN4bHGC/Nicu4FvBUI1rM3zZuKIUaf/+p1g0d8pN7KdhogrWAr9GYwp2Zbiq5mAqgnXSAjxlga6EAZytcvzYGXZP76DLFq33ajhzDsz1sT85MvCQDWqZkSOM8cUa2SjiXtl1sUD9+7xsRu1dCpjP3dpTiRjZJhuR8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=PstxDbUC; arc=none smtp.client-ip=95.215.58.182 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="PstxDbUC" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1774364753; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=1pwjzUaoLKRQGRwW5/62J5f/rc6uv0cMUcHFUjKNYB4=; b=PstxDbUClb3pwXjZ5bGeV4kDIZQr/cECrUYdrG0sIy+q8IHeRTWQwSHRJzJWJyxzS+LCUr WZyHV9vFhHu/k8MUFJDfZ/EhHthGwKbU5WYlNiKVTbeNFE1c6c9TcAUDdsYKZ0t2rPw0bk Lqt0FXUXHL22aXapbXPEd4IZGbuD1jc= From: Leon Hwang To: bpf@vger.kernel.org Cc: Alexei Starovoitov , Daniel Borkmann , John Fastabend , Andrii Nakryiko , Martin KaFai Lau , Eduard Zingerman , Song Liu , Yonghong Song , KP Singh , Stanislav Fomichev , Hao Luo , Jiri Olsa , Shuah Khan , "David S . Miller" , Jakub Kicinski , Jesper Dangaard Brouer , Leon Hwang , Toke Hoiland-Jorgensen , Lorenzo Bianconi , linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, netdev@vger.kernel.org, kernel-patches-bot@fb.com Subject: [PATCH bpf-next 3/3] selftests/bpf: Add tests to verify freplace compatibility Date: Tue, 24 Mar 2026 23:04:44 +0800 Message-ID: <20260324150444.68166-4-leon.hwang@linux.dev> In-Reply-To: <20260324150444.68166-1-leon.hwang@linux.dev> References: <20260324150444.68166-1-leon.hwang@linux.dev> 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 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset="utf-8" Add tests to verify the issues: * xdp_has_frags: The backwards compatibility can be broken via freplace. * kprobe_write_ctx: It can be abused to modify struct pt_regs of kernel functions via kprobe_write_ctx=3Dtrue freplace progs. Without the fixes, the issues are verified: xdp_has_frags=3Dtrue freplace prog is allowed to attach to xdp_has_frags=3Dfalse XDP prog. kprobe_write_ctx=3Dtrue freplace prog is allowed to attach to kprobe_write_ctx=3Dfalse kprobe prog. Then, the first arg of bpf_fentry_test1 will be set as 0, and bpf_prog_test_run_opts() gets -EFAULT instead of 0. With the fixes, the issues are rejected by verifier: Extension program cannot have different xdp_has_frags value with target pr= og #134/1 freplace_compatible/xdp_has_frags:OK Extension program cannot have different kprobe_write_ctx value with target= prog #134/2 freplace_compatible/kprobe_write_ctx:OK Signed-off-by: Leon Hwang --- .../bpf/prog_tests/freplace_compatible.c | 124 ++++++++++++++++++ .../selftests/bpf/progs/freplace_compatible.c | 40 ++++++ 2 files changed, 164 insertions(+) create mode 100644 tools/testing/selftests/bpf/prog_tests/freplace_compati= ble.c create mode 100644 tools/testing/selftests/bpf/progs/freplace_compatible.c diff --git a/tools/testing/selftests/bpf/prog_tests/freplace_compatible.c b= /tools/testing/selftests/bpf/prog_tests/freplace_compatible.c new file mode 100644 index 000000000000..251e17ef4e52 --- /dev/null +++ b/tools/testing/selftests/bpf/prog_tests/freplace_compatible.c @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include "freplace_compatible.skel.h" + +static void test_xdp_has_frags(void) +{ + struct freplace_compatible *skel_xdp, *skel_ext =3D NULL; + struct bpf_program *prog_xdp, *prog_ext; + struct bpf_link *link =3D NULL; + char buff[128] =3D {}; + int err, prog_fd; + __u32 flags; + LIBBPF_OPTS(bpf_test_run_opts, topts, + .data_in =3D buff, + .data_size_in =3D sizeof(buff), + .repeat =3D 1, + ); + + skel_xdp =3D freplace_compatible__open(); + if (!ASSERT_OK_PTR(skel_xdp, "freplace_compatible__open xdp")) + return; + + prog_xdp =3D skel_xdp->progs.xdp; + bpf_program__set_autoload(prog_xdp, true); + + err =3D freplace_compatible__load(skel_xdp); + if (!ASSERT_OK(err, "freplace_compatible__load xdp")) + goto out; + + skel_ext =3D freplace_compatible__open(); + if (!ASSERT_OK_PTR(skel_ext, "freplace_compatible__open ext")) + goto out; + + prog_ext =3D skel_ext->progs.freplace_xdp; + bpf_program__set_autoload(prog_ext, true); + + flags =3D bpf_program__flags(prog_ext) | BPF_F_XDP_HAS_FRAGS; + bpf_program__set_flags(prog_ext, flags); + + prog_fd =3D bpf_program__fd(prog_xdp); + bpf_program__set_attach_target(prog_ext, prog_fd, "xdp"); + + err =3D freplace_compatible__load(skel_ext); + ASSERT_ERR(err, "freplace_compatible__load ext"); + + link =3D bpf_program__attach_freplace(prog_ext, prog_fd, "xdp"); + ASSERT_ERR_PTR(link, "bpf_program__attach_freplace"); + + err =3D bpf_prog_test_run_opts(prog_fd, &topts); + if (!ASSERT_OK(err, "bpf_prog_test_run_opts")) + goto out; + + ASSERT_EQ(topts.retval, XDP_PASS, "xdp retval"); + +out: + bpf_link__destroy(link); + freplace_compatible__destroy(skel_ext); + freplace_compatible__destroy(skel_xdp); +} + +#ifdef __x86_64__ +static void test_kprobe_write_ctx(void) +{ + struct freplace_compatible *skel_kprobe, *skel_ext =3D NULL; + struct bpf_program *prog_kprobe, *prog_ext, *prog_fentry; + struct bpf_link *link_kprobe =3D NULL, *link_ext =3D NULL; + int err; + LIBBPF_OPTS(bpf_kprobe_opts, kprobe_opts); + LIBBPF_OPTS(bpf_test_run_opts, topts); + + skel_kprobe =3D freplace_compatible__open(); + if (!ASSERT_OK_PTR(skel_kprobe, "freplace_compatible__open kprobe")) + return; + + prog_kprobe =3D skel_kprobe->progs.kprobe; + bpf_program__set_autoload(prog_kprobe, true); + + prog_fentry =3D skel_kprobe->progs.fentry; + bpf_program__set_autoload(prog_fentry, true); + + err =3D freplace_compatible__load(skel_kprobe); + if (!ASSERT_OK(err, "freplace_compatible__load kprobe")) + goto out; + + skel_ext =3D freplace_compatible__open(); + if (!ASSERT_OK_PTR(skel_ext, "freplace_compatible__open ext")) + goto out; + + prog_ext =3D skel_ext->progs.freplace_kprobe; + bpf_program__set_autoload(prog_ext, true); + + bpf_program__set_attach_target(prog_ext, bpf_program__fd(prog_kprobe), "k= probe"); + + err =3D freplace_compatible__load(skel_ext); + ASSERT_ERR(err, "freplace_compatible__load ext"); + + link_ext =3D bpf_program__attach_freplace(prog_ext, 0, NULL); + ASSERT_ERR_PTR(link_ext, "bpf_program__attach_freplace"); + + link_kprobe =3D bpf_program__attach_kprobe_opts(prog_kprobe, "bpf_fentry_= test1", + &kprobe_opts); + if (!ASSERT_OK_PTR(link_kprobe, "bpf_program__attach_kprobe_opts")) + goto out; + + err =3D bpf_prog_test_run_opts(bpf_program__fd(prog_fentry), &topts); + ASSERT_OK(err, "bpf_prog_test_run_opts"); + +out: + bpf_link__destroy(link_ext); + bpf_link__destroy(link_kprobe); + freplace_compatible__destroy(skel_ext); + freplace_compatible__destroy(skel_kprobe); +} +#endif + +void test_freplace_compatible(void) +{ + if (test__start_subtest("xdp_has_frags")) + test_xdp_has_frags(); +#ifdef __x86_64__ + if (test__start_subtest("kprobe_write_ctx")) + test_kprobe_write_ctx(); +#endif +} diff --git a/tools/testing/selftests/bpf/progs/freplace_compatible.c b/tool= s/testing/selftests/bpf/progs/freplace_compatible.c new file mode 100644 index 000000000000..f13b4878268b --- /dev/null +++ b/tools/testing/selftests/bpf/progs/freplace_compatible.c @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: GPL-2.0 +#include +#include +#include + +SEC("?xdp") +int xdp(struct xdp_md *ctx) +{ + return XDP_PASS; +} + +SEC("?freplace") +int freplace_xdp(struct xdp_md *ctx) +{ + return 0xFF; +} + +#if defined(__TARGET_ARCH_x86) +SEC("?kprobe") +int kprobe(struct pt_regs *regs) +{ + return 0; +} + +SEC("?freplace") +int freplace_kprobe(struct pt_regs *regs) +{ + regs->di =3D 0; + return 0; +} + +SEC("?fentry/bpf_fentry_test1") +int BPF_PROG(fentry) +{ + return 0; +} +#endif + +char _license[] SEC("license") =3D "GPL"; + --=20 2.53.0