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

test_perf_branches.c (1079B)


      1// SPDX-License-Identifier: GPL-2.0
      2// Copyright (c) 2019 Facebook
      3
      4#include <stddef.h>
      5#include <linux/ptrace.h>
      6#include <linux/bpf.h>
      7#include <bpf/bpf_helpers.h>
      8#include <bpf/bpf_tracing.h>
      9
     10int valid = 0;
     11int required_size_out = 0;
     12int written_stack_out = 0;
     13int written_global_out = 0;
     14
     15struct {
     16	__u64 _a;
     17	__u64 _b;
     18	__u64 _c;
     19} fpbe[30] = {0};
     20
     21SEC("perf_event")
     22int perf_branches(void *ctx)
     23{
     24	__u64 entries[4 * 3] = {0};
     25	int required_size, written_stack, written_global;
     26
     27	/* write to stack */
     28	written_stack = bpf_read_branch_records(ctx, entries, sizeof(entries), 0);
     29	/* ignore spurious events */
     30	if (!written_stack)
     31		return 1;
     32
     33	/* get required size */
     34	required_size = bpf_read_branch_records(ctx, NULL, 0,
     35						BPF_F_GET_BRANCH_RECORDS_SIZE);
     36
     37	written_global = bpf_read_branch_records(ctx, fpbe, sizeof(fpbe), 0);
     38	/* ignore spurious events */
     39	if (!written_global)
     40		return 1;
     41
     42	required_size_out = required_size;
     43	written_stack_out = written_stack;
     44	written_global_out = written_global;
     45	valid = 1;
     46
     47	return 0;
     48}
     49
     50char _license[] SEC("license") = "GPL";