]> Git Repo - J-linux.git/blob - tools/testing/selftests/bpf/prog_tests/probe_read_user_str.c
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / tools / testing / selftests / bpf / prog_tests / probe_read_user_str.c
1 // SPDX-License-Identifier: GPL-2.0
2 #include <test_progs.h>
3 #include "test_probe_read_user_str.skel.h"
4
5 static const char str1[] = "mestring";
6 static const char str2[] = "mestringalittlebigger";
7 static const char str3[] = "mestringblubblubblubblubblub";
8
9 static int test_one_str(struct test_probe_read_user_str *skel, const char *str,
10                         size_t len)
11 {
12         int err, duration = 0;
13         char buf[256];
14
15         /* Ensure bytes after string are ones */
16         memset(buf, 1, sizeof(buf));
17         memcpy(buf, str, len);
18
19         /* Give prog our userspace pointer */
20         skel->bss->user_ptr = buf;
21
22         /* Trigger tracepoint */
23         usleep(1);
24
25         /* Did helper fail? */
26         if (CHECK(skel->bss->ret < 0, "prog_ret", "prog returned: %ld\n",
27                   skel->bss->ret))
28                 return 1;
29
30         /* Check that string was copied correctly */
31         err = memcmp(skel->bss->buf, str, len);
32         if (CHECK(err, "memcmp", "prog copied wrong string"))
33                 return 1;
34
35         /* Now check that no extra trailing bytes were copied */
36         memset(buf, 0, sizeof(buf));
37         err = memcmp(skel->bss->buf + len, buf, sizeof(buf) - len);
38         if (CHECK(err, "memcmp", "trailing bytes were not stripped"))
39                 return 1;
40
41         return 0;
42 }
43
44 void test_probe_read_user_str(void)
45 {
46         struct test_probe_read_user_str *skel;
47         int err, duration = 0;
48
49         skel = test_probe_read_user_str__open_and_load();
50         if (CHECK(!skel, "test_probe_read_user_str__open_and_load",
51                   "skeleton open and load failed\n"))
52                 return;
53
54         /* Give pid to bpf prog so it doesn't read from anyone else */
55         skel->bss->pid = getpid();
56
57         err = test_probe_read_user_str__attach(skel);
58         if (CHECK(err, "test_probe_read_user_str__attach",
59                   "skeleton attach failed: %d\n", err))
60                 goto out;
61
62         if (test_one_str(skel, str1, sizeof(str1)))
63                 goto out;
64         if (test_one_str(skel, str2, sizeof(str2)))
65                 goto out;
66         if (test_one_str(skel, str3, sizeof(str3)))
67                 goto out;
68
69 out:
70         test_probe_read_user_str__destroy(skel);
71 }
This page took 0.031174 seconds and 4 git commands to generate.