From: Hengqi Chen <hengqi.chen@gmail.com>
To: bpf@vger.kernel.org
Cc: ast@kernel.org, daniel@iogearbox.net, andrii@kernel.org,
yhs@fb.com, john.fastabend@gmail.com, kafai@fb.com,
songliubraving@fb.com, hengqi.chen@gmail.com
Subject: [PATCH bpf-next 2/2 v2] selftests/bpf: Test bpf_skc_to_unix_sock() helper
Date: Thu, 7 Oct 2021 22:13:31 +0800 [thread overview]
Message-ID: <20211007141331.723149-3-hengqi.chen@gmail.com> (raw)
In-Reply-To: <20211007141331.723149-1-hengqi.chen@gmail.com>
Add a new test which triggers unix_listen kernel function
to test bpf_skc_to_unix_sock helper.
Signed-off-by: Hengqi Chen <hengqi.chen@gmail.com>
---
.../bpf/prog_tests/skc_to_unix_sock.c | 54 +++++++++++++++++++
.../bpf/progs/test_skc_to_unix_sock.c | 29 ++++++++++
2 files changed, 83 insertions(+)
create mode 100644 tools/testing/selftests/bpf/prog_tests/skc_to_unix_sock.c
create mode 100644 tools/testing/selftests/bpf/progs/test_skc_to_unix_sock.c
diff --git a/tools/testing/selftests/bpf/prog_tests/skc_to_unix_sock.c b/tools/testing/selftests/bpf/prog_tests/skc_to_unix_sock.c
new file mode 100644
index 000000000000..971ef5b948bd
--- /dev/null
+++ b/tools/testing/selftests/bpf/prog_tests/skc_to_unix_sock.c
@@ -0,0 +1,54 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright (c) 2021 Hengqi Chen */
+
+#include <test_progs.h>
+#include <sys/un.h>
+#include "test_skc_to_unix_sock.skel.h"
+
+static const char *sock_path = "/tmp/test.sock";
+
+void test_skc_to_unix_sock(void)
+{
+ struct test_skc_to_unix_sock *skel;
+ struct sockaddr_un sockaddr;
+ int err, len, sockfd = 0;
+
+ skel = test_skc_to_unix_sock__open();
+ if (!ASSERT_OK_PTR(skel, "could not open BPF object"))
+ return;
+
+ skel->rodata->my_pid = getpid();
+
+ err = test_skc_to_unix_sock__load(skel);
+ if (!ASSERT_OK(err, "could not load BPF object"))
+ goto cleanup;
+
+ err = test_skc_to_unix_sock__attach(skel);
+ if (!ASSERT_OK(err, "could not attach BPF object"))
+ goto cleanup;
+
+ // trigger unix_listen
+ sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
+ if (!ASSERT_GT(sockfd, 0, "socket failed"))
+ goto cleanup;
+
+ sockaddr.sun_family = AF_UNIX;
+ strcpy(sockaddr.sun_path, sock_path);
+ len = sizeof(sockaddr);
+ unlink(sock_path);
+
+ err = bind(sockfd, (struct sockaddr *)&sockaddr, len);
+ if (!ASSERT_OK(err, "bind failed"))
+ goto cleanup;
+
+ err = listen(sockfd, 1);
+ if (!ASSERT_OK(err, "listen failed"))
+ goto cleanup;
+
+ ASSERT_EQ(strcmp(skel->bss->path, sock_path), 0, "bpf_skc_to_unix_sock failed");
+
+cleanup:
+ if (sockfd)
+ close(sockfd);
+ test_skc_to_unix_sock__destroy(skel);
+}
diff --git a/tools/testing/selftests/bpf/progs/test_skc_to_unix_sock.c b/tools/testing/selftests/bpf/progs/test_skc_to_unix_sock.c
new file mode 100644
index 000000000000..098c49c2edce
--- /dev/null
+++ b/tools/testing/selftests/bpf/progs/test_skc_to_unix_sock.c
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/* Copyright (c) 2021 Hengqi Chen */
+
+#include "vmlinux.h"
+#include <bpf/bpf_helpers.h>
+#include <bpf/bpf_tracing.h>
+#include <bpf/bpf_core_read.h>
+
+const volatile pid_t my_pid = 0;
+char path[256] = {};
+
+SEC("fentry/unix_listen")
+int BPF_PROG(unix_listen, struct socket *sock, int backlog)
+{
+ pid_t pid = bpf_get_current_pid_tgid() >> 32;
+ struct unix_sock *unix_sk;
+
+ if (pid != my_pid)
+ return 0;
+
+ unix_sk = (struct unix_sock *)bpf_skc_to_unix_sock(sock->sk);
+ if (!unix_sk)
+ return 0;
+
+ bpf_core_read_str(path, sizeof(path), &unix_sk->addr->name->sun_path);
+ return 0;
+}
+
+char _license[] SEC("license") = "GPL";
--
2.25.1
next prev parent reply other threads:[~2021-10-07 14:14 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-07 14:13 [PATCH bpf-next 0/2 v2] Add bpf_skc_to_unix_sock() helper Hengqi Chen
2021-10-07 14:13 ` [PATCH bpf-next 1/2 v2] bpf: " Hengqi Chen
2021-10-07 14:13 ` Hengqi Chen [this message]
2021-10-19 1:46 ` [PATCH bpf-next 2/2 v2] selftests/bpf: Test " Alexei Starovoitov
2021-10-19 15:23 ` Hengqi Chen
2021-10-19 17:02 ` Andrii Nakryiko
2021-10-20 13:41 ` Hengqi Chen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20211007141331.723149-3-hengqi.chen@gmail.com \
--to=hengqi.chen@gmail.com \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=john.fastabend@gmail.com \
--cc=kafai@fb.com \
--cc=songliubraving@fb.com \
--cc=yhs@fb.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox