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

get_branch_snapshot.c (895B)


      1// SPDX-License-Identifier: GPL-2.0
      2/* Copyright (c) 2021 Facebook */
      3#include "vmlinux.h"
      4#include <bpf/bpf_helpers.h>
      5#include <bpf/bpf_tracing.h>
      6
      7char _license[] SEC("license") = "GPL";
      8
      9__u64 test1_hits = 0;
     10__u64 address_low = 0;
     11__u64 address_high = 0;
     12int wasted_entries = 0;
     13long total_entries = 0;
     14
     15#define ENTRY_CNT 32
     16struct perf_branch_entry entries[ENTRY_CNT] = {};
     17
     18static inline bool in_range(__u64 val)
     19{
     20	return (val >= address_low) && (val < address_high);
     21}
     22
     23SEC("fexit/bpf_testmod_loop_test")
     24int BPF_PROG(test1, int n, int ret)
     25{
     26	long i;
     27
     28	total_entries = bpf_get_branch_snapshot(entries, sizeof(entries), 0);
     29	total_entries /= sizeof(struct perf_branch_entry);
     30
     31	for (i = 0; i < ENTRY_CNT; i++) {
     32		if (i >= total_entries)
     33			break;
     34		if (in_range(entries[i].from) && in_range(entries[i].to))
     35			test1_hits++;
     36		else if (!test1_hits)
     37			wasted_entries++;
     38	}
     39	return 0;
     40}