selftests/bpf: Use sys_pidfd_open() helper when possible
authorHou Tao <houtao1@huawei.com>
Tue, 11 Oct 2022 07:12:49 +0000 (15:12 +0800)
committerAndrii Nakryiko <andrii@kernel.org>
Thu, 13 Oct 2022 19:09:19 +0000 (12:09 -0700)
SYS_pidfd_open may be undefined for old glibc, so using sys_pidfd_open()
helper defined in task_local_storage_helpers.h instead to fix potential
build failure.

And according to commit 7615d9e1780e ("arch: wire-up pidfd_open()"), the
syscall number of pidfd_open is always 434 except for alpha architure,
so update the definition of __NR_pidfd_open accordingly.

Signed-off-by: Hou Tao <houtao1@huawei.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20221011071249.3471760-1-houtao@huaweicloud.com
tools/testing/selftests/bpf/prog_tests/bpf_iter.c
tools/testing/selftests/bpf/task_local_storage_helpers.h

index ecde236..c39d40f 100644 (file)
@@ -3,6 +3,7 @@
 #include <test_progs.h>
 #include <unistd.h>
 #include <sys/syscall.h>
+#include <task_local_storage_helpers.h>
 #include "bpf_iter_ipv6_route.skel.h"
 #include "bpf_iter_netlink.skel.h"
 #include "bpf_iter_bpf_map.skel.h"
@@ -175,11 +176,6 @@ static void test_bpf_map(void)
        bpf_iter_bpf_map__destroy(skel);
 }
 
-static int pidfd_open(pid_t pid, unsigned int flags)
-{
-       return syscall(SYS_pidfd_open, pid, flags);
-}
-
 static void check_bpf_link_info(const struct bpf_program *prog)
 {
        LIBBPF_OPTS(bpf_iter_attach_opts, opts);
@@ -295,8 +291,8 @@ static void test_task_pidfd(void)
        union bpf_iter_link_info linfo;
        int pidfd;
 
-       pidfd = pidfd_open(getpid(), 0);
-       if (!ASSERT_GT(pidfd, 0, "pidfd_open"))
+       pidfd = sys_pidfd_open(getpid(), 0);
+       if (!ASSERT_GT(pidfd, 0, "sys_pidfd_open"))
                return;
 
        memset(&linfo, 0, sizeof(linfo));
index 711d5ab..281f861 100644 (file)
@@ -7,8 +7,12 @@
 #include <sys/types.h>
 
 #ifndef __NR_pidfd_open
+#ifdef __alpha__
+#define __NR_pidfd_open 544
+#else
 #define __NR_pidfd_open 434
 #endif
+#endif
 
 static inline int sys_pidfd_open(pid_t pid, unsigned int flags)
 {