linux/tools/testing/selftests/bpf/bpf_testmod/bpf_testmod.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0
   2/* Copyright (c) 2020 Facebook */
   3#include <linux/error-injection.h>
   4#include <linux/init.h>
   5#include <linux/module.h>
   6#include <linux/percpu-defs.h>
   7#include <linux/sysfs.h>
   8#include <linux/tracepoint.h>
   9#include "bpf_testmod.h"
  10
  11#define CREATE_TRACE_POINTS
  12#include "bpf_testmod-events.h"
  13
  14DEFINE_PER_CPU(int, bpf_testmod_ksym_percpu) = 123;
  15
  16noinline ssize_t
  17bpf_testmod_test_read(struct file *file, struct kobject *kobj,
  18                      struct bin_attribute *bin_attr,
  19                      char *buf, loff_t off, size_t len)
  20{
  21        struct bpf_testmod_test_read_ctx ctx = {
  22                .buf = buf,
  23                .off = off,
  24                .len = len,
  25        };
  26
  27        trace_bpf_testmod_test_read(current, &ctx);
  28
  29        return -EIO; /* always fail */
  30}
  31EXPORT_SYMBOL(bpf_testmod_test_read);
  32ALLOW_ERROR_INJECTION(bpf_testmod_test_read, ERRNO);
  33
  34noinline ssize_t
  35bpf_testmod_test_write(struct file *file, struct kobject *kobj,
  36                      struct bin_attribute *bin_attr,
  37                      char *buf, loff_t off, size_t len)
  38{
  39        struct bpf_testmod_test_write_ctx ctx = {
  40                .buf = buf,
  41                .off = off,
  42                .len = len,
  43        };
  44
  45        trace_bpf_testmod_test_write_bare(current, &ctx);
  46
  47        return -EIO; /* always fail */
  48}
  49EXPORT_SYMBOL(bpf_testmod_test_write);
  50ALLOW_ERROR_INJECTION(bpf_testmod_test_write, ERRNO);
  51
  52static struct bin_attribute bin_attr_bpf_testmod_file __ro_after_init = {
  53        .attr = { .name = "bpf_testmod", .mode = 0666, },
  54        .read = bpf_testmod_test_read,
  55        .write = bpf_testmod_test_write,
  56};
  57
  58static int bpf_testmod_init(void)
  59{
  60        return sysfs_create_bin_file(kernel_kobj, &bin_attr_bpf_testmod_file);
  61}
  62
  63static void bpf_testmod_exit(void)
  64{
  65        return sysfs_remove_bin_file(kernel_kobj, &bin_attr_bpf_testmod_file);
  66}
  67
  68module_init(bpf_testmod_init);
  69module_exit(bpf_testmod_exit);
  70
  71MODULE_AUTHOR("Andrii Nakryiko");
  72MODULE_DESCRIPTION("BPF selftests module");
  73MODULE_LICENSE("Dual BSD/GPL");
  74
  75