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

task_pt_regs.c (1204B)


      1// SPDX-License-Identifier: GPL-2.0
      2#define _GNU_SOURCE
      3#include <test_progs.h>
      4#include "test_task_pt_regs.skel.h"
      5
      6/* uprobe attach point */
      7static void trigger_func(void)
      8{
      9	asm volatile ("");
     10}
     11
     12void test_task_pt_regs(void)
     13{
     14	struct test_task_pt_regs *skel;
     15	struct bpf_link *uprobe_link;
     16	ssize_t uprobe_offset;
     17	bool match;
     18
     19	uprobe_offset = get_uprobe_offset(&trigger_func);
     20	if (!ASSERT_GE(uprobe_offset, 0, "uprobe_offset"))
     21		return;
     22
     23	skel = test_task_pt_regs__open_and_load();
     24	if (!ASSERT_OK_PTR(skel, "skel_open"))
     25		return;
     26	if (!ASSERT_OK_PTR(skel->bss, "check_bss"))
     27		goto cleanup;
     28
     29	uprobe_link = bpf_program__attach_uprobe(skel->progs.handle_uprobe,
     30						 false /* retprobe */,
     31						 0 /* self pid */,
     32						 "/proc/self/exe",
     33						 uprobe_offset);
     34	if (!ASSERT_OK_PTR(uprobe_link, "attach_uprobe"))
     35		goto cleanup;
     36	skel->links.handle_uprobe = uprobe_link;
     37
     38	/* trigger & validate uprobe */
     39	trigger_func();
     40
     41	if (!ASSERT_EQ(skel->bss->uprobe_res, 1, "check_uprobe_res"))
     42		goto cleanup;
     43
     44	match = !memcmp(&skel->bss->current_regs, &skel->bss->ctx_regs,
     45			sizeof(skel->bss->current_regs));
     46	ASSERT_TRUE(match, "check_regs_match");
     47
     48cleanup:
     49	test_task_pt_regs__destroy(skel);
     50}