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_ksyms_module.c (1329B)


      1// SPDX-License-Identifier: GPL-2.0
      2/* Copyright (c) 2021 Facebook */
      3
      4#include "vmlinux.h"
      5#include <bpf/bpf_helpers.h>
      6
      7#define X_0(x)
      8#define X_1(x) x X_0(x)
      9#define X_2(x) x X_1(x)
     10#define X_3(x) x X_2(x)
     11#define X_4(x) x X_3(x)
     12#define X_5(x) x X_4(x)
     13#define X_6(x) x X_5(x)
     14#define X_7(x) x X_6(x)
     15#define X_8(x) x X_7(x)
     16#define X_9(x) x X_8(x)
     17#define X_10(x) x X_9(x)
     18#define REPEAT_256(Y) X_2(X_10(X_10(Y))) X_5(X_10(Y)) X_6(Y)
     19
     20extern const int bpf_testmod_ksym_percpu __ksym;
     21extern void bpf_testmod_test_mod_kfunc(int i) __ksym;
     22extern void bpf_testmod_invalid_mod_kfunc(void) __ksym __weak;
     23
     24int out_bpf_testmod_ksym = 0;
     25const volatile int x = 0;
     26
     27SEC("tc")
     28int load(struct __sk_buff *skb)
     29{
     30	/* This will be kept by clang, but removed by verifier. Since it is
     31	 * marked as __weak, libbpf and gen_loader don't error out if BTF ID
     32	 * is not found for it, instead imm and off is set to 0 for it.
     33	 */
     34	if (x)
     35		bpf_testmod_invalid_mod_kfunc();
     36	bpf_testmod_test_mod_kfunc(42);
     37	out_bpf_testmod_ksym = *(int *)bpf_this_cpu_ptr(&bpf_testmod_ksym_percpu);
     38	return 0;
     39}
     40
     41SEC("tc")
     42int load_256(struct __sk_buff *skb)
     43{
     44	/* this will fail if kfunc doesn't reuse its own btf fd index */
     45	REPEAT_256(bpf_testmod_test_mod_kfunc(42););
     46	bpf_testmod_test_mod_kfunc(42);
     47	return 0;
     48}
     49
     50char LICENSE[] SEC("license") = "GPL";