72 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <test_progs.h>3#include "test_probe_read_user_str.skel.h"4 5static const char str1[] = "mestring";6static const char str2[] = "mestringalittlebigger";7static const char str3[] = "mestringblubblubblubblubblub";8 9static 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 44void 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 69out:70 test_probe_read_user_str__destroy(skel);71}72