OSDN Git Service

libbpf: Fix XDP program load regression for old kernels
authorAndrii Nakryiko <andriin@fb.com>
Thu, 24 Sep 2020 17:17:05 +0000 (10:17 -0700)
committerAlexei Starovoitov <ast@kernel.org>
Thu, 24 Sep 2020 17:33:02 +0000 (10:33 -0700)
Fix regression in libbpf, introduced by XDP link change, which causes XDP
programs to fail to be loaded into kernel due to specified BPF_XDP
expected_attach_type. While kernel doesn't enforce expected_attach_type for
BPF_PROG_TYPE_XDP, some old kernels already support XDP program, but they
don't yet recognize expected_attach_type field in bpf_attr, so setting it to
non-zero value causes program load to fail.

Luckily, libbpf already has a mechanism to deal with such cases, so just make
expected_attach_type optional for XDP programs.

Fixes: dc8698cac7aa ("libbpf: Add support for BPF XDP link")
Reported-by: Nikita Shirokov <tehnerd@tehnerd.com>
Reported-by: Udip Pant <udippant@fb.com>
Signed-off-by: Andrii Nakryiko <andriin@fb.com>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200924171705.3803628-1-andriin@fb.com
tools/lib/bpf/libbpf.c

index 7253b83..e493d60 100644 (file)
@@ -6925,7 +6925,7 @@ static const struct bpf_sec_def section_defs[] = {
                                                BPF_XDP_DEVMAP),
        BPF_EAPROG_SEC("xdp_cpumap/",           BPF_PROG_TYPE_XDP,
                                                BPF_XDP_CPUMAP),
-       BPF_EAPROG_SEC("xdp",                   BPF_PROG_TYPE_XDP,
+       BPF_APROG_SEC("xdp",                    BPF_PROG_TYPE_XDP,
                                                BPF_XDP),
        BPF_PROG_SEC("perf_event",              BPF_PROG_TYPE_PERF_EVENT),
        BPF_PROG_SEC("lwt_in",                  BPF_PROG_TYPE_LWT_IN),