cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

probe_read_user_str.c (1850B)


      1// SPDX-License-Identifier: GPL-2.0
      2#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}