linux/include/linux/bpf.h
<<
>>
Prefs
   1/* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com
   2 *
   3 * This program is free software; you can redistribute it and/or
   4 * modify it under the terms of version 2 of the GNU General Public
   5 * License as published by the Free Software Foundation.
   6 */
   7#ifndef _LINUX_BPF_H
   8#define _LINUX_BPF_H 1
   9
  10#include <uapi/linux/bpf.h>
  11
  12#include <linux/workqueue.h>
  13#include <linux/file.h>
  14#include <linux/percpu.h>
  15#include <linux/err.h>
  16#include <linux/rbtree_latch.h>
  17#include <linux/numa.h>
  18#include <linux/wait.h>
  19
  20struct bpf_verifier_env;
  21struct perf_event;
  22struct bpf_prog;
  23struct bpf_map;
  24struct sock;
  25struct seq_file;
  26struct btf_type;
  27
  28/* map is generic key/value storage optionally accesible by eBPF programs */
  29struct bpf_map_ops {
  30        /* funcs callable from userspace (via syscall) */
  31        int (*map_alloc_check)(union bpf_attr *attr);
  32        struct bpf_map *(*map_alloc)(union bpf_attr *attr);
  33        void (*map_release)(struct bpf_map *map, struct file *map_file);
  34        void (*map_free)(struct bpf_map *map);
  35        int (*map_get_next_key)(struct bpf_map *map, void *key, void *next_key);
  36        void (*map_release_uref)(struct bpf_map *map);
  37
  38        /* funcs callable from userspace and from eBPF programs */
  39        void *(*map_lookup_elem)(struct bpf_map *map, void *key);
  40        int (*map_update_elem)(struct bpf_map *map, void *key, void *value, u64 flags);
  41        int (*map_delete_elem)(struct bpf_map *map, void *key);
  42
  43        /* funcs called by prog_array and perf_event_array map */
  44        void *(*map_fd_get_ptr)(struct bpf_map *map, struct file *map_file,
  45                                int fd);
  46        void (*map_fd_put_ptr)(void *ptr);
  47        u32 (*map_gen_lookup)(struct bpf_map *map, struct bpf_insn *insn_buf);
  48        u32 (*map_fd_sys_lookup_elem)(void *ptr);
  49        void (*map_seq_show_elem)(struct bpf_map *map, void *key,
  50                                  struct seq_file *m);
  51        int (*map_check_btf)(const struct bpf_map *map,
  52                             const struct btf_type *key_type,
  53                             const struct btf_type *value_type);
  54};
  55
  56struct bpf_map {
  57        /* The first two cachelines with read-mostly members of which some
  58         * are also accessed in fast-path (e.g. ops, max_entries).
  59         */
  60        const struct bpf_map_ops *ops ____cacheline_aligned;
  61        struct bpf_map *inner_map_meta;
  62#ifdef CONFIG_SECURITY
  63        void *security;
  64#endif
  65        enum bpf_map_type map_type;
  66        u32 key_size;
  67        u32 value_size;
  68        u32 max_entries;
  69        u32 map_flags;
  70        u32 pages;
  71        u32 id;
  72        int numa_node;
  73        u32 btf_key_type_id;
  74        u32 btf_value_type_id;
  75        struct btf *btf;
  76        bool unpriv_array;
  77        /* 55 bytes hole */
  78
  79        /* The 3rd and 4th cacheline with misc members to avoid false sharing
  80         * particularly with refcounting.
  81         */
  82        struct user_struct *user ____cacheline_aligned;
  83        atomic_t refcnt;
  84        atomic_t usercnt;
  85        struct work_struct work;
  86        char name[BPF_OBJ_NAME_LEN];
  87};
  88
  89struct bpf_offload_dev;
  90struct bpf_offloaded_map;
  91
  92struct bpf_map_dev_ops {
  93        int (*map_get_next_key)(struct bpf_offloaded_map *map,
  94                                void *key, void *next_key);
  95        int (*map_lookup_elem)(struct bpf_offloaded_map *map,
  96                               void *key, void *value);
  97        int (*map_update_elem)(struct bpf_offloaded_map *map,
  98                               void *key, void *value, u64 flags);
  99        int (*map_delete_elem)(struct bpf_offloaded_map *map, void *key);
 100};
 101
 102struct bpf_offloaded_map {
 103        struct bpf_map map;
 104        struct net_device *netdev;
 105        const struct bpf_map_dev_ops *dev_ops;
 106        void *dev_priv;
 107        struct list_head offloads;
 108};
 109
 110static inline struct bpf_offloaded_map *map_to_offmap(struct bpf_map *map)
 111{
 112        return container_of(map, struct bpf_offloaded_map, map);
 113}
 114
 115static inline bool bpf_map_offload_neutral(const struct bpf_map *map)
 116{
 117        return map->map_type == BPF_MAP_TYPE_PERF_EVENT_ARRAY;
 118}
 119
 120static inline bool bpf_map_support_seq_show(const struct bpf_map *map)
 121{
 122        return map->btf && map->ops->map_seq_show_elem;
 123}
 124
 125int map_check_no_btf(const struct bpf_map *map,
 126                     const struct btf_type *key_type,
 127                     const struct btf_type *value_type);
 128
 129extern const struct bpf_map_ops bpf_map_offload_ops;
 130
 131/* function argument constraints */
 132enum bpf_arg_type {
 133        ARG_DONTCARE = 0,       /* unused argument in helper function */
 134
 135        /* the following constraints used to prototype
 136         * bpf_map_lookup/update/delete_elem() functions
 137         */
 138        ARG_CONST_MAP_PTR,      /* const argument used as pointer to bpf_map */
 139        ARG_PTR_TO_MAP_KEY,     /* pointer to stack used as map key */
 140        ARG_PTR_TO_MAP_VALUE,   /* pointer to stack used as map value */
 141
 142        /* the following constraints used to prototype bpf_memcmp() and other
 143         * functions that access data on eBPF program stack
 144         */
 145        ARG_PTR_TO_MEM,         /* pointer to valid memory (stack, packet, map value) */
 146        ARG_PTR_TO_MEM_OR_NULL, /* pointer to valid memory or NULL */
 147        ARG_PTR_TO_UNINIT_MEM,  /* pointer to memory does not need to be initialized,
 148                                 * helper function must fill all bytes or clear
 149                                 * them in error case.
 150                                 */
 151
 152        ARG_CONST_SIZE,         /* number of bytes accessed from memory */
 153        ARG_CONST_SIZE_OR_ZERO, /* number of bytes accessed from memory or 0 */
 154
 155        ARG_PTR_TO_CTX,         /* pointer to context */
 156        ARG_ANYTHING,           /* any (initialized) argument is ok */
 157};
 158
 159/* type of values returned from helper functions */
 160enum bpf_return_type {
 161        RET_INTEGER,                    /* function returns integer */
 162        RET_VOID,                       /* function doesn't return anything */
 163        RET_PTR_TO_MAP_VALUE,           /* returns a pointer to map elem value */
 164        RET_PTR_TO_MAP_VALUE_OR_NULL,   /* returns a pointer to map elem value or NULL */
 165};
 166
 167/* eBPF function prototype used by verifier to allow BPF_CALLs from eBPF programs
 168 * to in-kernel helper functions and for adjusting imm32 field in BPF_CALL
 169 * instructions after verifying
 170 */
 171struct bpf_func_proto {
 172        u64 (*func)(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5);
 173        bool gpl_only;
 174        bool pkt_access;
 175        enum bpf_return_type ret_type;
 176        enum bpf_arg_type arg1_type;
 177        enum bpf_arg_type arg2_type;
 178        enum bpf_arg_type arg3_type;
 179        enum bpf_arg_type arg4_type;
 180        enum bpf_arg_type arg5_type;
 181};
 182
 183/* bpf_context is intentionally undefined structure. Pointer to bpf_context is
 184 * the first argument to eBPF programs.
 185 * For socket filters: 'struct bpf_context *' == 'struct sk_buff *'
 186 */
 187struct bpf_context;
 188
 189enum bpf_access_type {
 190        BPF_READ = 1,
 191        BPF_WRITE = 2
 192};
 193
 194/* types of values stored in eBPF registers */
 195/* Pointer types represent:
 196 * pointer
 197 * pointer + imm
 198 * pointer + (u16) var
 199 * pointer + (u16) var + imm
 200 * if (range > 0) then [ptr, ptr + range - off) is safe to access
 201 * if (id > 0) means that some 'var' was added
 202 * if (off > 0) means that 'imm' was added
 203 */
 204enum bpf_reg_type {
 205        NOT_INIT = 0,            /* nothing was written into register */
 206        SCALAR_VALUE,            /* reg doesn't contain a valid pointer */
 207        PTR_TO_CTX,              /* reg points to bpf_context */
 208        CONST_PTR_TO_MAP,        /* reg points to struct bpf_map */
 209        PTR_TO_MAP_VALUE,        /* reg points to map element value */
 210        PTR_TO_MAP_VALUE_OR_NULL,/* points to map elem value or NULL */
 211        PTR_TO_STACK,            /* reg == frame_pointer + offset */
 212        PTR_TO_PACKET_META,      /* skb->data - meta_len */
 213        PTR_TO_PACKET,           /* reg points to skb->data */
 214        PTR_TO_PACKET_END,       /* skb->data + headlen */
 215};
 216
 217/* The information passed from prog-specific *_is_valid_access
 218 * back to the verifier.
 219 */
 220struct bpf_insn_access_aux {
 221        enum bpf_reg_type reg_type;
 222        int ctx_field_size;
 223};
 224
 225static inline void
 226bpf_ctx_record_field_size(struct bpf_insn_access_aux *aux, u32 size)
 227{
 228        aux->ctx_field_size = size;
 229}
 230
 231struct bpf_prog_ops {
 232        int (*test_run)(struct bpf_prog *prog, const union bpf_attr *kattr,
 233                        union bpf_attr __user *uattr);
 234};
 235
 236struct bpf_verifier_ops {
 237        /* return eBPF function prototype for verification */
 238        const struct bpf_func_proto *
 239        (*get_func_proto)(enum bpf_func_id func_id,
 240                          const struct bpf_prog *prog);
 241
 242        /* return true if 'size' wide access at offset 'off' within bpf_context
 243         * with 'type' (read or write) is allowed
 244         */
 245        bool (*is_valid_access)(int off, int size, enum bpf_access_type type,
 246                                const struct bpf_prog *prog,
 247                                struct bpf_insn_access_aux *info);
 248        int (*gen_prologue)(struct bpf_insn *insn, bool direct_write,
 249                            const struct bpf_prog *prog);
 250        int (*gen_ld_abs)(const struct bpf_insn *orig,
 251                          struct bpf_insn *insn_buf);
 252        u32 (*convert_ctx_access)(enum bpf_access_type type,
 253                                  const struct bpf_insn *src,
 254                                  struct bpf_insn *dst,
 255                                  struct bpf_prog *prog, u32 *target_size);
 256};
 257
 258struct bpf_prog_offload_ops {
 259        int (*insn_hook)(struct bpf_verifier_env *env,
 260                         int insn_idx, int prev_insn_idx);
 261};
 262
 263struct bpf_prog_offload {
 264        struct bpf_prog         *prog;
 265        struct net_device       *netdev;
 266        void                    *dev_priv;
 267        struct list_head        offloads;
 268        bool                    dev_state;
 269        const struct bpf_prog_offload_ops *dev_ops;
 270        void                    *jited_image;
 271        u32                     jited_len;
 272};
 273
 274struct bpf_prog_aux {
 275        atomic_t refcnt;
 276        u32 used_map_cnt;
 277        u32 max_ctx_offset;
 278        u32 stack_depth;
 279        u32 id;
 280        u32 func_cnt;
 281        bool offload_requested;
 282        struct bpf_prog **func;
 283        void *jit_data; /* JIT specific data. arch dependent */
 284        struct latch_tree_node ksym_tnode;
 285        struct list_head ksym_lnode;
 286        const struct bpf_prog_ops *ops;
 287        struct bpf_map **used_maps;
 288        struct bpf_prog *prog;
 289        struct user_struct *user;
 290        u64 load_time; /* ns since boottime */
 291        struct bpf_map *cgroup_storage;
 292        char name[BPF_OBJ_NAME_LEN];
 293#ifdef CONFIG_SECURITY
 294        void *security;
 295#endif
 296        struct bpf_prog_offload *offload;
 297        union {
 298                struct work_struct work;
 299                struct rcu_head rcu;
 300        };
 301};
 302
 303struct bpf_array {
 304        struct bpf_map map;
 305        u32 elem_size;
 306        u32 index_mask;
 307        /* 'ownership' of prog_array is claimed by the first program that
 308         * is going to use this map or by the first program which FD is stored
 309         * in the map to make sure that all callers and callees have the same
 310         * prog_type and JITed flag
 311         */
 312        enum bpf_prog_type owner_prog_type;
 313        bool owner_jited;
 314        union {
 315                char value[0] __aligned(8);
 316                void *ptrs[0] __aligned(8);
 317                void __percpu *pptrs[0] __aligned(8);
 318        };
 319};
 320
 321#define MAX_TAIL_CALL_CNT 32
 322
 323struct bpf_event_entry {
 324        struct perf_event *event;
 325        struct file *perf_file;
 326        struct file *map_file;
 327        struct rcu_head rcu;
 328};
 329
 330bool bpf_prog_array_compatible(struct bpf_array *array, const struct bpf_prog *fp);
 331int bpf_prog_calc_tag(struct bpf_prog *fp);
 332
 333const struct bpf_func_proto *bpf_get_trace_printk_proto(void);
 334
 335typedef unsigned long (*bpf_ctx_copy_t)(void *dst, const void *src,
 336                                        unsigned long off, unsigned long len);
 337
 338u64 bpf_event_output(struct bpf_map *map, u64 flags, void *meta, u64 meta_size,
 339                     void *ctx, u64 ctx_size, bpf_ctx_copy_t ctx_copy);
 340
 341int bpf_prog_test_run_xdp(struct bpf_prog *prog, const union bpf_attr *kattr,
 342                          union bpf_attr __user *uattr);
 343int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,
 344                          union bpf_attr __user *uattr);
 345
 346/* an array of programs to be executed under rcu_lock.
 347 *
 348 * Typical usage:
 349 * ret = BPF_PROG_RUN_ARRAY(&bpf_prog_array, ctx, BPF_PROG_RUN);
 350 *
 351 * the structure returned by bpf_prog_array_alloc() should be populated
 352 * with program pointers and the last pointer must be NULL.
 353 * The user has to keep refcnt on the program and make sure the program
 354 * is removed from the array before bpf_prog_put().
 355 * The 'struct bpf_prog_array *' should only be replaced with xchg()
 356 * since other cpus are walking the array of pointers in parallel.
 357 */
 358struct bpf_prog_array_item {
 359        struct bpf_prog *prog;
 360        struct bpf_cgroup_storage *cgroup_storage;
 361};
 362
 363struct bpf_prog_array {
 364        struct rcu_head rcu;
 365        struct bpf_prog_array_item items[0];
 366};
 367
 368struct bpf_prog_array *bpf_prog_array_alloc(u32 prog_cnt, gfp_t flags);
 369void bpf_prog_array_free(struct bpf_prog_array __rcu *progs);
 370int bpf_prog_array_length(struct bpf_prog_array __rcu *progs);
 371int bpf_prog_array_copy_to_user(struct bpf_prog_array __rcu *progs,
 372                                __u32 __user *prog_ids, u32 cnt);
 373
 374void bpf_prog_array_delete_safe(struct bpf_prog_array __rcu *progs,
 375                                struct bpf_prog *old_prog);
 376int bpf_prog_array_copy_info(struct bpf_prog_array __rcu *array,
 377                             u32 *prog_ids, u32 request_cnt,
 378                             u32 *prog_cnt);
 379int bpf_prog_array_copy(struct bpf_prog_array __rcu *old_array,
 380                        struct bpf_prog *exclude_prog,
 381                        struct bpf_prog *include_prog,
 382                        struct bpf_prog_array **new_array);
 383
 384#define __BPF_PROG_RUN_ARRAY(array, ctx, func, check_non_null)  \
 385        ({                                              \
 386                struct bpf_prog_array_item *_item;      \
 387                struct bpf_prog *_prog;                 \
 388                struct bpf_prog_array *_array;          \
 389                u32 _ret = 1;                           \
 390                preempt_disable();                      \
 391                rcu_read_lock();                        \
 392                _array = rcu_dereference(array);        \
 393                if (unlikely(check_non_null && !_array))\
 394                        goto _out;                      \
 395                _item = &_array->items[0];              \
 396                while ((_prog = READ_ONCE(_item->prog))) {              \
 397                        bpf_cgroup_storage_set(_item->cgroup_storage);  \
 398                        _ret &= func(_prog, ctx);       \
 399                        _item++;                        \
 400                }                                       \
 401_out:                                                   \
 402                rcu_read_unlock();                      \
 403                preempt_enable_no_resched();            \
 404                _ret;                                   \
 405         })
 406
 407#define BPF_PROG_RUN_ARRAY(array, ctx, func)            \
 408        __BPF_PROG_RUN_ARRAY(array, ctx, func, false)
 409
 410#define BPF_PROG_RUN_ARRAY_CHECK(array, ctx, func)      \
 411        __BPF_PROG_RUN_ARRAY(array, ctx, func, true)
 412
 413#ifdef CONFIG_BPF_SYSCALL
 414DECLARE_PER_CPU(int, bpf_prog_active);
 415
 416extern const struct file_operations bpf_map_fops;
 417extern const struct file_operations bpf_prog_fops;
 418
 419#define BPF_PROG_TYPE(_id, _name) \
 420        extern const struct bpf_prog_ops _name ## _prog_ops; \
 421        extern const struct bpf_verifier_ops _name ## _verifier_ops;
 422#define BPF_MAP_TYPE(_id, _ops) \
 423        extern const struct bpf_map_ops _ops;
 424#include <linux/bpf_types.h>
 425#undef BPF_PROG_TYPE
 426#undef BPF_MAP_TYPE
 427
 428extern const struct bpf_prog_ops bpf_offload_prog_ops;
 429extern const struct bpf_verifier_ops tc_cls_act_analyzer_ops;
 430extern const struct bpf_verifier_ops xdp_analyzer_ops;
 431
 432struct bpf_prog *bpf_prog_get(u32 ufd);
 433struct bpf_prog *bpf_prog_get_type_dev(u32 ufd, enum bpf_prog_type type,
 434                                       bool attach_drv);
 435struct bpf_prog * __must_check bpf_prog_add(struct bpf_prog *prog, int i);
 436void bpf_prog_sub(struct bpf_prog *prog, int i);
 437struct bpf_prog * __must_check bpf_prog_inc(struct bpf_prog *prog);
 438struct bpf_prog * __must_check bpf_prog_inc_not_zero(struct bpf_prog *prog);
 439void bpf_prog_put(struct bpf_prog *prog);
 440int __bpf_prog_charge(struct user_struct *user, u32 pages);
 441void __bpf_prog_uncharge(struct user_struct *user, u32 pages);
 442
 443void bpf_prog_free_id(struct bpf_prog *prog, bool do_idr_lock);
 444void bpf_map_free_id(struct bpf_map *map, bool do_idr_lock);
 445
 446struct bpf_map *bpf_map_get_with_uref(u32 ufd);
 447struct bpf_map *__bpf_map_get(struct fd f);
 448struct bpf_map * __must_check bpf_map_inc(struct bpf_map *map, bool uref);
 449void bpf_map_put_with_uref(struct bpf_map *map);
 450void bpf_map_put(struct bpf_map *map);
 451int bpf_map_precharge_memlock(u32 pages);
 452int bpf_map_charge_memlock(struct bpf_map *map, u32 pages);
 453void bpf_map_uncharge_memlock(struct bpf_map *map, u32 pages);
 454void *bpf_map_area_alloc(size_t size, int numa_node);
 455void bpf_map_area_free(void *base);
 456void bpf_map_init_from_attr(struct bpf_map *map, union bpf_attr *attr);
 457
 458extern int sysctl_unprivileged_bpf_disabled;
 459
 460int bpf_map_new_fd(struct bpf_map *map, int flags);
 461int bpf_prog_new_fd(struct bpf_prog *prog);
 462
 463int bpf_obj_pin_user(u32 ufd, const char __user *pathname);
 464int bpf_obj_get_user(const char __user *pathname, int flags);
 465
 466int bpf_percpu_hash_copy(struct bpf_map *map, void *key, void *value);
 467int bpf_percpu_array_copy(struct bpf_map *map, void *key, void *value);
 468int bpf_percpu_hash_update(struct bpf_map *map, void *key, void *value,
 469                           u64 flags);
 470int bpf_percpu_array_update(struct bpf_map *map, void *key, void *value,
 471                            u64 flags);
 472
 473int bpf_stackmap_copy(struct bpf_map *map, void *key, void *value);
 474
 475int bpf_fd_array_map_update_elem(struct bpf_map *map, struct file *map_file,
 476                                 void *key, void *value, u64 map_flags);
 477int bpf_fd_array_map_lookup_elem(struct bpf_map *map, void *key, u32 *value);
 478int bpf_fd_htab_map_update_elem(struct bpf_map *map, struct file *map_file,
 479                                void *key, void *value, u64 map_flags);
 480int bpf_fd_htab_map_lookup_elem(struct bpf_map *map, void *key, u32 *value);
 481
 482int bpf_get_file_flag(int flags);
 483int bpf_check_uarg_tail_zero(void __user *uaddr, size_t expected_size,
 484                             size_t actual_size);
 485
 486/* memcpy that is used with 8-byte aligned pointers, power-of-8 size and
 487 * forced to use 'long' read/writes to try to atomically copy long counters.
 488 * Best-effort only.  No barriers here, since it _will_ race with concurrent
 489 * updates from BPF programs. Called from bpf syscall and mostly used with
 490 * size 8 or 16 bytes, so ask compiler to inline it.
 491 */
 492static inline void bpf_long_memcpy(void *dst, const void *src, u32 size)
 493{
 494        const long *lsrc = src;
 495        long *ldst = dst;
 496
 497        size /= sizeof(long);
 498        while (size--)
 499                *ldst++ = *lsrc++;
 500}
 501
 502/* verify correctness of eBPF program */
 503int bpf_check(struct bpf_prog **fp, union bpf_attr *attr);
 504void bpf_patch_call_args(struct bpf_insn *insn, u32 stack_depth);
 505
 506/* Map specifics */
 507struct xdp_buff;
 508struct sk_buff;
 509
 510struct bpf_dtab_netdev *__dev_map_lookup_elem(struct bpf_map *map, u32 key);
 511void __dev_map_insert_ctx(struct bpf_map *map, u32 index);
 512void __dev_map_flush(struct bpf_map *map);
 513int dev_map_enqueue(struct bpf_dtab_netdev *dst, struct xdp_buff *xdp,
 514                    struct net_device *dev_rx);
 515int dev_map_generic_redirect(struct bpf_dtab_netdev *dst, struct sk_buff *skb,
 516                             struct bpf_prog *xdp_prog);
 517
 518struct bpf_cpu_map_entry *__cpu_map_lookup_elem(struct bpf_map *map, u32 key);
 519void __cpu_map_insert_ctx(struct bpf_map *map, u32 index);
 520void __cpu_map_flush(struct bpf_map *map);
 521int cpu_map_enqueue(struct bpf_cpu_map_entry *rcpu, struct xdp_buff *xdp,
 522                    struct net_device *dev_rx);
 523
 524/* Return map's numa specified by userspace */
 525static inline int bpf_map_attr_numa_node(const union bpf_attr *attr)
 526{
 527        return (attr->map_flags & BPF_F_NUMA_NODE) ?
 528                attr->numa_node : NUMA_NO_NODE;
 529}
 530
 531struct bpf_prog *bpf_prog_get_type_path(const char *name, enum bpf_prog_type type);
 532int array_map_alloc_check(union bpf_attr *attr);
 533
 534#else /* !CONFIG_BPF_SYSCALL */
 535static inline struct bpf_prog *bpf_prog_get(u32 ufd)
 536{
 537        return ERR_PTR(-EOPNOTSUPP);
 538}
 539
 540static inline struct bpf_prog *bpf_prog_get_type_dev(u32 ufd,
 541                                                     enum bpf_prog_type type,
 542                                                     bool attach_drv)
 543{
 544        return ERR_PTR(-EOPNOTSUPP);
 545}
 546
 547static inline struct bpf_prog * __must_check bpf_prog_add(struct bpf_prog *prog,
 548                                                          int i)
 549{
 550        return ERR_PTR(-EOPNOTSUPP);
 551}
 552
 553static inline void bpf_prog_sub(struct bpf_prog *prog, int i)
 554{
 555}
 556
 557static inline void bpf_prog_put(struct bpf_prog *prog)
 558{
 559}
 560
 561static inline struct bpf_prog * __must_check bpf_prog_inc(struct bpf_prog *prog)
 562{
 563        return ERR_PTR(-EOPNOTSUPP);
 564}
 565
 566static inline struct bpf_prog *__must_check
 567bpf_prog_inc_not_zero(struct bpf_prog *prog)
 568{
 569        return ERR_PTR(-EOPNOTSUPP);
 570}
 571
 572static inline int __bpf_prog_charge(struct user_struct *user, u32 pages)
 573{
 574        return 0;
 575}
 576
 577static inline void __bpf_prog_uncharge(struct user_struct *user, u32 pages)
 578{
 579}
 580
 581static inline int bpf_obj_get_user(const char __user *pathname, int flags)
 582{
 583        return -EOPNOTSUPP;
 584}
 585
 586static inline struct net_device  *__dev_map_lookup_elem(struct bpf_map *map,
 587                                                       u32 key)
 588{
 589        return NULL;
 590}
 591
 592static inline void __dev_map_insert_ctx(struct bpf_map *map, u32 index)
 593{
 594}
 595
 596static inline void __dev_map_flush(struct bpf_map *map)
 597{
 598}
 599
 600struct xdp_buff;
 601struct bpf_dtab_netdev;
 602
 603static inline
 604int dev_map_enqueue(struct bpf_dtab_netdev *dst, struct xdp_buff *xdp,
 605                    struct net_device *dev_rx)
 606{
 607        return 0;
 608}
 609
 610struct sk_buff;
 611
 612static inline int dev_map_generic_redirect(struct bpf_dtab_netdev *dst,
 613                                           struct sk_buff *skb,
 614                                           struct bpf_prog *xdp_prog)
 615{
 616        return 0;
 617}
 618
 619static inline
 620struct bpf_cpu_map_entry *__cpu_map_lookup_elem(struct bpf_map *map, u32 key)
 621{
 622        return NULL;
 623}
 624
 625static inline void __cpu_map_insert_ctx(struct bpf_map *map, u32 index)
 626{
 627}
 628
 629static inline void __cpu_map_flush(struct bpf_map *map)
 630{
 631}
 632
 633static inline int cpu_map_enqueue(struct bpf_cpu_map_entry *rcpu,
 634                                  struct xdp_buff *xdp,
 635                                  struct net_device *dev_rx)
 636{
 637        return 0;
 638}
 639
 640static inline struct bpf_prog *bpf_prog_get_type_path(const char *name,
 641                                enum bpf_prog_type type)
 642{
 643        return ERR_PTR(-EOPNOTSUPP);
 644}
 645#endif /* CONFIG_BPF_SYSCALL */
 646
 647static inline struct bpf_prog *bpf_prog_get_type(u32 ufd,
 648                                                 enum bpf_prog_type type)
 649{
 650        return bpf_prog_get_type_dev(ufd, type, false);
 651}
 652
 653bool bpf_prog_get_ok(struct bpf_prog *, enum bpf_prog_type *, bool);
 654
 655int bpf_prog_offload_compile(struct bpf_prog *prog);
 656void bpf_prog_offload_destroy(struct bpf_prog *prog);
 657int bpf_prog_offload_info_fill(struct bpf_prog_info *info,
 658                               struct bpf_prog *prog);
 659
 660int bpf_map_offload_info_fill(struct bpf_map_info *info, struct bpf_map *map);
 661
 662int bpf_map_offload_lookup_elem(struct bpf_map *map, void *key, void *value);
 663int bpf_map_offload_update_elem(struct bpf_map *map,
 664                                void *key, void *value, u64 flags);
 665int bpf_map_offload_delete_elem(struct bpf_map *map, void *key);
 666int bpf_map_offload_get_next_key(struct bpf_map *map,
 667                                 void *key, void *next_key);
 668
 669bool bpf_offload_prog_map_match(struct bpf_prog *prog, struct bpf_map *map);
 670
 671struct bpf_offload_dev *bpf_offload_dev_create(void);
 672void bpf_offload_dev_destroy(struct bpf_offload_dev *offdev);
 673int bpf_offload_dev_netdev_register(struct bpf_offload_dev *offdev,
 674                                    struct net_device *netdev);
 675void bpf_offload_dev_netdev_unregister(struct bpf_offload_dev *offdev,
 676                                       struct net_device *netdev);
 677bool bpf_offload_dev_match(struct bpf_prog *prog, struct net_device *netdev);
 678
 679#if defined(CONFIG_NET) && defined(CONFIG_BPF_SYSCALL)
 680int bpf_prog_offload_init(struct bpf_prog *prog, union bpf_attr *attr);
 681
 682static inline bool bpf_prog_is_dev_bound(const struct bpf_prog_aux *aux)
 683{
 684        return aux->offload_requested;
 685}
 686
 687static inline bool bpf_map_is_dev_bound(struct bpf_map *map)
 688{
 689        return unlikely(map->ops == &bpf_map_offload_ops);
 690}
 691
 692struct bpf_map *bpf_map_offload_map_alloc(union bpf_attr *attr);
 693void bpf_map_offload_map_free(struct bpf_map *map);
 694#else
 695static inline int bpf_prog_offload_init(struct bpf_prog *prog,
 696                                        union bpf_attr *attr)
 697{
 698        return -EOPNOTSUPP;
 699}
 700
 701static inline bool bpf_prog_is_dev_bound(struct bpf_prog_aux *aux)
 702{
 703        return false;
 704}
 705
 706static inline bool bpf_map_is_dev_bound(struct bpf_map *map)
 707{
 708        return false;
 709}
 710
 711static inline struct bpf_map *bpf_map_offload_map_alloc(union bpf_attr *attr)
 712{
 713        return ERR_PTR(-EOPNOTSUPP);
 714}
 715
 716static inline void bpf_map_offload_map_free(struct bpf_map *map)
 717{
 718}
 719#endif /* CONFIG_NET && CONFIG_BPF_SYSCALL */
 720
 721#if defined(CONFIG_STREAM_PARSER) && defined(CONFIG_BPF_SYSCALL) && defined(CONFIG_INET)
 722struct sock  *__sock_map_lookup_elem(struct bpf_map *map, u32 key);
 723struct sock  *__sock_hash_lookup_elem(struct bpf_map *map, void *key);
 724int sock_map_prog(struct bpf_map *map, struct bpf_prog *prog, u32 type);
 725int sockmap_get_from_fd(const union bpf_attr *attr, int type,
 726                        struct bpf_prog *prog);
 727#else
 728static inline struct sock  *__sock_map_lookup_elem(struct bpf_map *map, u32 key)
 729{
 730        return NULL;
 731}
 732
 733static inline struct sock  *__sock_hash_lookup_elem(struct bpf_map *map,
 734                                                    void *key)
 735{
 736        return NULL;
 737}
 738
 739static inline int sock_map_prog(struct bpf_map *map,
 740                                struct bpf_prog *prog,
 741                                u32 type)
 742{
 743        return -EOPNOTSUPP;
 744}
 745
 746static inline int sockmap_get_from_fd(const union bpf_attr *attr, int type,
 747                                      struct bpf_prog *prog)
 748{
 749        return -EINVAL;
 750}
 751#endif
 752
 753#if defined(CONFIG_XDP_SOCKETS)
 754struct xdp_sock;
 755struct xdp_sock *__xsk_map_lookup_elem(struct bpf_map *map, u32 key);
 756int __xsk_map_redirect(struct bpf_map *map, struct xdp_buff *xdp,
 757                       struct xdp_sock *xs);
 758void __xsk_map_flush(struct bpf_map *map);
 759#else
 760struct xdp_sock;
 761static inline struct xdp_sock *__xsk_map_lookup_elem(struct bpf_map *map,
 762                                                     u32 key)
 763{
 764        return NULL;
 765}
 766
 767static inline int __xsk_map_redirect(struct bpf_map *map, struct xdp_buff *xdp,
 768                                     struct xdp_sock *xs)
 769{
 770        return -EOPNOTSUPP;
 771}
 772
 773static inline void __xsk_map_flush(struct bpf_map *map)
 774{
 775}
 776#endif
 777
 778#if defined(CONFIG_INET) && defined(CONFIG_BPF_SYSCALL)
 779void bpf_sk_reuseport_detach(struct sock *sk);
 780int bpf_fd_reuseport_array_lookup_elem(struct bpf_map *map, void *key,
 781                                       void *value);
 782int bpf_fd_reuseport_array_update_elem(struct bpf_map *map, void *key,
 783                                       void *value, u64 map_flags);
 784#else
 785static inline void bpf_sk_reuseport_detach(struct sock *sk)
 786{
 787}
 788
 789#ifdef CONFIG_BPF_SYSCALL
 790static inline int bpf_fd_reuseport_array_lookup_elem(struct bpf_map *map,
 791                                                     void *key, void *value)
 792{
 793        return -EOPNOTSUPP;
 794}
 795
 796static inline int bpf_fd_reuseport_array_update_elem(struct bpf_map *map,
 797                                                     void *key, void *value,
 798                                                     u64 map_flags)
 799{
 800        return -EOPNOTSUPP;
 801}
 802#endif /* CONFIG_BPF_SYSCALL */
 803#endif /* defined(CONFIG_INET) && defined(CONFIG_BPF_SYSCALL) */
 804
 805/* verifier prototypes for helper functions called from eBPF programs */
 806extern const struct bpf_func_proto bpf_map_lookup_elem_proto;
 807extern const struct bpf_func_proto bpf_map_update_elem_proto;
 808extern const struct bpf_func_proto bpf_map_delete_elem_proto;
 809
 810extern const struct bpf_func_proto bpf_get_prandom_u32_proto;
 811extern const struct bpf_func_proto bpf_get_smp_processor_id_proto;
 812extern const struct bpf_func_proto bpf_get_numa_node_id_proto;
 813extern const struct bpf_func_proto bpf_tail_call_proto;
 814extern const struct bpf_func_proto bpf_ktime_get_ns_proto;
 815extern const struct bpf_func_proto bpf_get_current_pid_tgid_proto;
 816extern const struct bpf_func_proto bpf_get_current_uid_gid_proto;
 817extern const struct bpf_func_proto bpf_get_current_comm_proto;
 818extern const struct bpf_func_proto bpf_get_stackid_proto;
 819extern const struct bpf_func_proto bpf_get_stack_proto;
 820extern const struct bpf_func_proto bpf_sock_map_update_proto;
 821extern const struct bpf_func_proto bpf_sock_hash_update_proto;
 822extern const struct bpf_func_proto bpf_get_current_cgroup_id_proto;
 823
 824extern const struct bpf_func_proto bpf_get_local_storage_proto;
 825
 826/* Shared helpers among cBPF and eBPF. */
 827void bpf_user_rnd_init_once(void);
 828u64 bpf_user_rnd_u32(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5);
 829
 830#endif /* _LINUX_BPF_H */
 831