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_sockmap_update.c (963B)


      1// SPDX-License-Identifier: GPL-2.0
      2// Copyright (c) 2020 Cloudflare
      3#include "vmlinux.h"
      4#include <bpf/bpf_helpers.h>
      5
      6struct {
      7	__uint(type, BPF_MAP_TYPE_SOCKMAP);
      8	__uint(max_entries, 1);
      9	__type(key, __u32);
     10	__type(value, __u64);
     11} src SEC(".maps");
     12
     13struct {
     14	__uint(type, BPF_MAP_TYPE_SOCKMAP);
     15	__uint(max_entries, 1);
     16	__type(key, __u32);
     17	__type(value, __u64);
     18} dst_sock_map SEC(".maps");
     19
     20struct {
     21	__uint(type, BPF_MAP_TYPE_SOCKHASH);
     22	__uint(max_entries, 1);
     23	__type(key, __u32);
     24	__type(value, __u64);
     25} dst_sock_hash SEC(".maps");
     26
     27SEC("tc")
     28int copy_sock_map(void *ctx)
     29{
     30	struct bpf_sock *sk;
     31	bool failed = false;
     32	__u32 key = 0;
     33
     34	sk = bpf_map_lookup_elem(&src, &key);
     35	if (!sk)
     36		return SK_DROP;
     37
     38	if (bpf_map_update_elem(&dst_sock_map, &key, sk, 0))
     39		failed = true;
     40
     41	if (bpf_map_update_elem(&dst_sock_hash, &key, sk, 0))
     42		failed = true;
     43
     44	bpf_sk_release(sk);
     45	return failed ? SK_DROP : SK_PASS;
     46}
     47
     48char _license[] SEC("license") = "GPL";