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_btf_write_check.c (836B)


      1// SPDX-License-Identifier: GPL-2.0
      2/* Copyright (c) 2021 Google */
      3
      4#include "vmlinux.h"
      5
      6#include <bpf/bpf_helpers.h>
      7
      8extern const int bpf_prog_active __ksym; /* int type global var. */
      9
     10SEC("raw_tp/sys_enter")
     11int handler1(const void *ctx)
     12{
     13	int *active;
     14	__u32 cpu;
     15
     16	cpu = bpf_get_smp_processor_id();
     17	active = (int *)bpf_per_cpu_ptr(&bpf_prog_active, cpu);
     18	if (active) {
     19		/* Kernel memory obtained from bpf_{per,this}_cpu_ptr
     20		 * is read-only, should _not_ pass verification.
     21		 */
     22		/* WRITE_ONCE */
     23		*(volatile int *)active = -1;
     24	}
     25
     26	return 0;
     27}
     28
     29__noinline int write_active(int *p)
     30{
     31	return p ? (*p = 42) : 0;
     32}
     33
     34SEC("raw_tp/sys_enter")
     35int handler2(const void *ctx)
     36{
     37	int *active;
     38	__u32 cpu;
     39
     40	active = bpf_this_cpu_ptr(&bpf_prog_active);
     41	write_active(active);
     42	return 0;
     43}
     44
     45char _license[] SEC("license") = "GPL";