]> git.ipfire.org Git - thirdparty/iproute2.git/commitdiff
lib: bpf_legacy: fix bpffs mount when /sys/fs/bpf exists
authorAndrea Claudi <aclaudi@redhat.com>
Tue, 21 Sep 2021 09:33:24 +0000 (11:33 +0200)
committerStephen Hemminger <stephen@networkplumber.org>
Thu, 23 Sep 2021 00:30:52 +0000 (17:30 -0700)
bpf selftests using iproute2 fails with:

$ ip link set dev veth0 xdp object ../bpf/xdp_dummy.o section xdp_dummy
Continuing without mounted eBPF fs. Too old kernel?
mkdir (null)/globals failed: No such file or directory
Unable to load program

This happens when the /sys/fs/bpf directory exists. In this case, mkdir
in bpf_mnt_check_target() fails with errno == EEXIST, and the function
returns -1. Thus bpf_get_work_dir() does not call bpf_mnt_fs() and the
bpffs is not mounted.

Fix this in bpf_mnt_check_target(), returning 0 when the mountpoint
exists.

Fixes: d4fcdbbec9df ("lib/bpf: Fix and simplify bpf_mnt_check_target()")
Reported-by: Mingyu Shi <mshi@redhat.com>
Reported-by: Jiri Benc <jbenc@redhat.com>
Suggested-by: Jiri Benc <jbenc@redhat.com>
Signed-off-by: Andrea Claudi <aclaudi@redhat.com>
Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
lib/bpf_legacy.c

index 91086aa204536c1d0236f9d8419a06db15b26fbd..275941ddc8d93e13345dfabc00429a701a16d8e7 100644 (file)
@@ -513,9 +513,12 @@ static int bpf_mnt_check_target(const char *target)
        int ret;
 
        ret = mkdir(target, S_IRWXU);
-       if (ret && errno != EEXIST)
+       if (ret) {
+               if (errno == EEXIST)
+                       return 0;
                fprintf(stderr, "mkdir %s failed: %s\n", target,
                        strerror(errno));
+       }
 
        return ret;
 }