selftests/bpf: Add test case for different expected_attach_type

Add a small test case which adds two programs - one calling the other
through a tailcall - and check that BPF rejects them in case of different
expected_attach_type values:

  # ./vmtest.sh -- ./test_progs -t xdp_devmap
  [...]
  #641/1   xdp_devmap_attach/DEVMAP with programs in entries:OK
  #641/2   xdp_devmap_attach/DEVMAP with frags programs in entries:OK
  #641/3   xdp_devmap_attach/Verifier check of DEVMAP programs:OK
  #641/4   xdp_devmap_attach/DEVMAP with programs in entries on veth:OK
  #641     xdp_devmap_attach:OK
  Summary: 2/4 PASSED, 0 SKIPPED, 0 FAILED

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Link: https://lore.kernel.org/r/20250926171201.188490-2-daniel@iogearbox.net
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
Daniel Borkmann
2025-09-26 19:12:01 +02:00
committed by Alexei Starovoitov
parent 4540aed51b
commit 0e8e60e86c
2 changed files with 59 additions and 1 deletions

View File

@@ -7,6 +7,7 @@
#include <test_progs.h>
#include "test_xdp_devmap_helpers.skel.h"
#include "test_xdp_devmap_tailcall.skel.h"
#include "test_xdp_with_devmap_frags_helpers.skel.h"
#include "test_xdp_with_devmap_helpers.skel.h"
@@ -107,6 +108,29 @@ static void test_neg_xdp_devmap_helpers(void)
}
}
static void test_xdp_devmap_tailcall(enum bpf_attach_type prog_dev,
enum bpf_attach_type prog_tail,
bool expect_reject)
{
struct test_xdp_devmap_tailcall *skel;
int err;
skel = test_xdp_devmap_tailcall__open();
if (!ASSERT_OK_PTR(skel, "test_xdp_devmap_tailcall__open"))
return;
bpf_program__set_expected_attach_type(skel->progs.xdp_devmap, prog_dev);
bpf_program__set_expected_attach_type(skel->progs.xdp_entry, prog_tail);
err = test_xdp_devmap_tailcall__load(skel);
if (expect_reject)
ASSERT_ERR(err, "test_xdp_devmap_tailcall__load");
else
ASSERT_OK(err, "test_xdp_devmap_tailcall__load");
test_xdp_devmap_tailcall__destroy(skel);
}
static void test_xdp_with_devmap_frags_helpers(void)
{
struct test_xdp_with_devmap_frags_helpers *skel;
@@ -238,8 +262,13 @@ void serial_test_xdp_devmap_attach(void)
if (test__start_subtest("DEVMAP with frags programs in entries"))
test_xdp_with_devmap_frags_helpers();
if (test__start_subtest("Verifier check of DEVMAP programs"))
if (test__start_subtest("Verifier check of DEVMAP programs")) {
test_neg_xdp_devmap_helpers();
test_xdp_devmap_tailcall(BPF_XDP_DEVMAP, BPF_XDP_DEVMAP, false);
test_xdp_devmap_tailcall(0, 0, true);
test_xdp_devmap_tailcall(BPF_XDP_DEVMAP, 0, true);
test_xdp_devmap_tailcall(0, BPF_XDP_DEVMAP, true);
}
if (test__start_subtest("DEVMAP with programs in entries on veth"))
test_xdp_with_devmap_helpers_veth();