LCOV - code coverage report
Current view: top level - include/linux - bpf.h (source / functions) Hit Total Coverage
Test: landlock.info Lines: 7 44 15.9 %
Date: 2021-04-22 12:43:58 Functions: 0 3 0.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: GPL-2.0-only */
       2             : /* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com
       3             :  */
       4             : #ifndef _LINUX_BPF_H
       5             : #define _LINUX_BPF_H 1
       6             : 
       7             : #include <uapi/linux/bpf.h>
       8             : 
       9             : #include <linux/workqueue.h>
      10             : #include <linux/file.h>
      11             : #include <linux/percpu.h>
      12             : #include <linux/err.h>
      13             : #include <linux/rbtree_latch.h>
      14             : #include <linux/numa.h>
      15             : #include <linux/mm_types.h>
      16             : #include <linux/wait.h>
      17             : #include <linux/refcount.h>
      18             : #include <linux/mutex.h>
      19             : #include <linux/module.h>
      20             : #include <linux/kallsyms.h>
      21             : #include <linux/capability.h>
      22             : #include <linux/sched/mm.h>
      23             : #include <linux/slab.h>
      24             : 
      25             : struct bpf_verifier_env;
      26             : struct bpf_verifier_log;
      27             : struct perf_event;
      28             : struct bpf_prog;
      29             : struct bpf_prog_aux;
      30             : struct bpf_map;
      31             : struct sock;
      32             : struct seq_file;
      33             : struct btf;
      34             : struct btf_type;
      35             : struct exception_table_entry;
      36             : struct seq_operations;
      37             : struct bpf_iter_aux_info;
      38             : struct bpf_local_storage;
      39             : struct bpf_local_storage_map;
      40             : struct kobject;
      41             : struct mem_cgroup;
      42             : 
      43             : extern struct idr btf_idr;
      44             : extern spinlock_t btf_idr_lock;
      45             : extern struct kobject *btf_kobj;
      46             : 
      47             : typedef int (*bpf_iter_init_seq_priv_t)(void *private_data,
      48             :                                         struct bpf_iter_aux_info *aux);
      49             : typedef void (*bpf_iter_fini_seq_priv_t)(void *private_data);
      50             : struct bpf_iter_seq_info {
      51             :         const struct seq_operations *seq_ops;
      52             :         bpf_iter_init_seq_priv_t init_seq_private;
      53             :         bpf_iter_fini_seq_priv_t fini_seq_private;
      54             :         u32 seq_priv_size;
      55             : };
      56             : 
      57             : /* map is generic key/value storage optionally accesible by eBPF programs */
      58             : struct bpf_map_ops {
      59             :         /* funcs callable from userspace (via syscall) */
      60             :         int (*map_alloc_check)(union bpf_attr *attr);
      61             :         struct bpf_map *(*map_alloc)(union bpf_attr *attr);
      62             :         void (*map_release)(struct bpf_map *map, struct file *map_file);
      63             :         void (*map_free)(struct bpf_map *map);
      64             :         int (*map_get_next_key)(struct bpf_map *map, void *key, void *next_key);
      65             :         void (*map_release_uref)(struct bpf_map *map);
      66             :         void *(*map_lookup_elem_sys_only)(struct bpf_map *map, void *key);
      67             :         int (*map_lookup_batch)(struct bpf_map *map, const union bpf_attr *attr,
      68             :                                 union bpf_attr __user *uattr);
      69             :         int (*map_lookup_and_delete_batch)(struct bpf_map *map,
      70             :                                            const union bpf_attr *attr,
      71             :                                            union bpf_attr __user *uattr);
      72             :         int (*map_update_batch)(struct bpf_map *map, const union bpf_attr *attr,
      73             :                                 union bpf_attr __user *uattr);
      74             :         int (*map_delete_batch)(struct bpf_map *map, const union bpf_attr *attr,
      75             :                                 union bpf_attr __user *uattr);
      76             : 
      77             :         /* funcs callable from userspace and from eBPF programs */
      78             :         void *(*map_lookup_elem)(struct bpf_map *map, void *key);
      79             :         int (*map_update_elem)(struct bpf_map *map, void *key, void *value, u64 flags);
      80             :         int (*map_delete_elem)(struct bpf_map *map, void *key);
      81             :         int (*map_push_elem)(struct bpf_map *map, void *value, u64 flags);
      82             :         int (*map_pop_elem)(struct bpf_map *map, void *value);
      83             :         int (*map_peek_elem)(struct bpf_map *map, void *value);
      84             : 
      85             :         /* funcs called by prog_array and perf_event_array map */
      86             :         void *(*map_fd_get_ptr)(struct bpf_map *map, struct file *map_file,
      87             :                                 int fd);
      88             :         void (*map_fd_put_ptr)(void *ptr);
      89             :         int (*map_gen_lookup)(struct bpf_map *map, struct bpf_insn *insn_buf);
      90             :         u32 (*map_fd_sys_lookup_elem)(void *ptr);
      91             :         void (*map_seq_show_elem)(struct bpf_map *map, void *key,
      92             :                                   struct seq_file *m);
      93             :         int (*map_check_btf)(const struct bpf_map *map,
      94             :                              const struct btf *btf,
      95             :                              const struct btf_type *key_type,
      96             :                              const struct btf_type *value_type);
      97             : 
      98             :         /* Prog poke tracking helpers. */
      99             :         int (*map_poke_track)(struct bpf_map *map, struct bpf_prog_aux *aux);
     100             :         void (*map_poke_untrack)(struct bpf_map *map, struct bpf_prog_aux *aux);
     101             :         void (*map_poke_run)(struct bpf_map *map, u32 key, struct bpf_prog *old,
     102             :                              struct bpf_prog *new);
     103             : 
     104             :         /* Direct value access helpers. */
     105             :         int (*map_direct_value_addr)(const struct bpf_map *map,
     106             :                                      u64 *imm, u32 off);
     107             :         int (*map_direct_value_meta)(const struct bpf_map *map,
     108             :                                      u64 imm, u32 *off);
     109             :         int (*map_mmap)(struct bpf_map *map, struct vm_area_struct *vma);
     110             :         __poll_t (*map_poll)(struct bpf_map *map, struct file *filp,
     111             :                              struct poll_table_struct *pts);
     112             : 
     113             :         /* Functions called by bpf_local_storage maps */
     114             :         int (*map_local_storage_charge)(struct bpf_local_storage_map *smap,
     115             :                                         void *owner, u32 size);
     116             :         void (*map_local_storage_uncharge)(struct bpf_local_storage_map *smap,
     117             :                                            void *owner, u32 size);
     118             :         struct bpf_local_storage __rcu ** (*map_owner_storage_ptr)(void *owner);
     119             : 
     120             :         /* map_meta_equal must be implemented for maps that can be
     121             :          * used as an inner map.  It is a runtime check to ensure
     122             :          * an inner map can be inserted to an outer map.
     123             :          *
     124             :          * Some properties of the inner map has been used during the
     125             :          * verification time.  When inserting an inner map at the runtime,
     126             :          * map_meta_equal has to ensure the inserting map has the same
     127             :          * properties that the verifier has used earlier.
     128             :          */
     129             :         bool (*map_meta_equal)(const struct bpf_map *meta0,
     130             :                                const struct bpf_map *meta1);
     131             : 
     132             :         /* BTF name and id of struct allocated by map_alloc */
     133             :         const char * const map_btf_name;
     134             :         int *map_btf_id;
     135             : 
     136             :         /* bpf_iter info used to open a seq_file */
     137             :         const struct bpf_iter_seq_info *iter_seq_info;
     138             : };
     139             : 
     140             : struct bpf_map {
     141             :         /* The first two cachelines with read-mostly members of which some
     142             :          * are also accessed in fast-path (e.g. ops, max_entries).
     143             :          */
     144             :         const struct bpf_map_ops *ops ____cacheline_aligned;
     145             :         struct bpf_map *inner_map_meta;
     146             : #ifdef CONFIG_SECURITY
     147             :         void *security;
     148             : #endif
     149             :         enum bpf_map_type map_type;
     150             :         u32 key_size;
     151             :         u32 value_size;
     152             :         u32 max_entries;
     153             :         u32 map_flags;
     154             :         int spin_lock_off; /* >=0 valid offset, <0 error */
     155             :         u32 id;
     156             :         int numa_node;
     157             :         u32 btf_key_type_id;
     158             :         u32 btf_value_type_id;
     159             :         struct btf *btf;
     160             : #ifdef CONFIG_MEMCG_KMEM
     161             :         struct mem_cgroup *memcg;
     162             : #endif
     163             :         char name[BPF_OBJ_NAME_LEN];
     164             :         u32 btf_vmlinux_value_type_id;
     165             :         bool bypass_spec_v1;
     166             :         bool frozen; /* write-once; write-protected by freeze_mutex */
     167             :         /* 22 bytes hole */
     168             : 
     169             :         /* The 3rd and 4th cacheline with misc members to avoid false sharing
     170             :          * particularly with refcounting.
     171             :          */
     172             :         atomic64_t refcnt ____cacheline_aligned;
     173             :         atomic64_t usercnt;
     174             :         struct work_struct work;
     175             :         struct mutex freeze_mutex;
     176             :         u64 writecnt; /* writable mmap cnt; protected by freeze_mutex */
     177             : };
     178             : 
     179             : static inline bool map_value_has_spin_lock(const struct bpf_map *map)
     180             : {
     181             :         return map->spin_lock_off >= 0;
     182             : }
     183             : 
     184             : static inline void check_and_init_map_lock(struct bpf_map *map, void *dst)
     185             : {
     186             :         if (likely(!map_value_has_spin_lock(map)))
     187             :                 return;
     188             :         *(struct bpf_spin_lock *)(dst + map->spin_lock_off) =
     189             :                 (struct bpf_spin_lock){};
     190             : }
     191             : 
     192             : /* copy everything but bpf_spin_lock */
     193             : static inline void copy_map_value(struct bpf_map *map, void *dst, void *src)
     194             : {
     195             :         if (unlikely(map_value_has_spin_lock(map))) {
     196             :                 u32 off = map->spin_lock_off;
     197             : 
     198             :                 memcpy(dst, src, off);
     199             :                 memcpy(dst + off + sizeof(struct bpf_spin_lock),
     200             :                        src + off + sizeof(struct bpf_spin_lock),
     201             :                        map->value_size - off - sizeof(struct bpf_spin_lock));
     202             :         } else {
     203             :                 memcpy(dst, src, map->value_size);
     204             :         }
     205             : }
     206             : void copy_map_value_locked(struct bpf_map *map, void *dst, void *src,
     207             :                            bool lock_src);
     208             : int bpf_obj_name_cpy(char *dst, const char *src, unsigned int size);
     209             : 
     210             : struct bpf_offload_dev;
     211             : struct bpf_offloaded_map;
     212             : 
     213             : struct bpf_map_dev_ops {
     214             :         int (*map_get_next_key)(struct bpf_offloaded_map *map,
     215             :                                 void *key, void *next_key);
     216             :         int (*map_lookup_elem)(struct bpf_offloaded_map *map,
     217             :                                void *key, void *value);
     218             :         int (*map_update_elem)(struct bpf_offloaded_map *map,
     219             :                                void *key, void *value, u64 flags);
     220             :         int (*map_delete_elem)(struct bpf_offloaded_map *map, void *key);
     221             : };
     222             : 
     223             : struct bpf_offloaded_map {
     224             :         struct bpf_map map;
     225             :         struct net_device *netdev;
     226             :         const struct bpf_map_dev_ops *dev_ops;
     227             :         void *dev_priv;
     228             :         struct list_head offloads;
     229             : };
     230             : 
     231             : static inline struct bpf_offloaded_map *map_to_offmap(struct bpf_map *map)
     232             : {
     233             :         return container_of(map, struct bpf_offloaded_map, map);
     234             : }
     235             : 
     236             : static inline bool bpf_map_offload_neutral(const struct bpf_map *map)
     237             : {
     238             :         return map->map_type == BPF_MAP_TYPE_PERF_EVENT_ARRAY;
     239             : }
     240             : 
     241             : static inline bool bpf_map_support_seq_show(const struct bpf_map *map)
     242             : {
     243             :         return (map->btf_value_type_id || map->btf_vmlinux_value_type_id) &&
     244             :                 map->ops->map_seq_show_elem;
     245             : }
     246             : 
     247             : int map_check_no_btf(const struct bpf_map *map,
     248             :                      const struct btf *btf,
     249             :                      const struct btf_type *key_type,
     250             :                      const struct btf_type *value_type);
     251             : 
     252             : bool bpf_map_meta_equal(const struct bpf_map *meta0,
     253             :                         const struct bpf_map *meta1);
     254             : 
     255             : extern const struct bpf_map_ops bpf_map_offload_ops;
     256             : 
     257             : /* function argument constraints */
     258             : enum bpf_arg_type {
     259             :         ARG_DONTCARE = 0,       /* unused argument in helper function */
     260             : 
     261             :         /* the following constraints used to prototype
     262             :          * bpf_map_lookup/update/delete_elem() functions
     263             :          */
     264             :         ARG_CONST_MAP_PTR,      /* const argument used as pointer to bpf_map */
     265             :         ARG_PTR_TO_MAP_KEY,     /* pointer to stack used as map key */
     266             :         ARG_PTR_TO_MAP_VALUE,   /* pointer to stack used as map value */
     267             :         ARG_PTR_TO_UNINIT_MAP_VALUE,    /* pointer to valid memory used to store a map value */
     268             :         ARG_PTR_TO_MAP_VALUE_OR_NULL,   /* pointer to stack used as map value or NULL */
     269             : 
     270             :         /* the following constraints used to prototype bpf_memcmp() and other
     271             :          * functions that access data on eBPF program stack
     272             :          */
     273             :         ARG_PTR_TO_MEM,         /* pointer to valid memory (stack, packet, map value) */
     274             :         ARG_PTR_TO_MEM_OR_NULL, /* pointer to valid memory or NULL */
     275             :         ARG_PTR_TO_UNINIT_MEM,  /* pointer to memory does not need to be initialized,
     276             :                                  * helper function must fill all bytes or clear
     277             :                                  * them in error case.
     278             :                                  */
     279             : 
     280             :         ARG_CONST_SIZE,         /* number of bytes accessed from memory */
     281             :         ARG_CONST_SIZE_OR_ZERO, /* number of bytes accessed from memory or 0 */
     282             : 
     283             :         ARG_PTR_TO_CTX,         /* pointer to context */
     284             :         ARG_PTR_TO_CTX_OR_NULL, /* pointer to context or NULL */
     285             :         ARG_ANYTHING,           /* any (initialized) argument is ok */
     286             :         ARG_PTR_TO_SPIN_LOCK,   /* pointer to bpf_spin_lock */
     287             :         ARG_PTR_TO_SOCK_COMMON, /* pointer to sock_common */
     288             :         ARG_PTR_TO_INT,         /* pointer to int */
     289             :         ARG_PTR_TO_LONG,        /* pointer to long */
     290             :         ARG_PTR_TO_SOCKET,      /* pointer to bpf_sock (fullsock) */
     291             :         ARG_PTR_TO_SOCKET_OR_NULL,      /* pointer to bpf_sock (fullsock) or NULL */
     292             :         ARG_PTR_TO_BTF_ID,      /* pointer to in-kernel struct */
     293             :         ARG_PTR_TO_ALLOC_MEM,   /* pointer to dynamically allocated memory */
     294             :         ARG_PTR_TO_ALLOC_MEM_OR_NULL,   /* pointer to dynamically allocated memory or NULL */
     295             :         ARG_CONST_ALLOC_SIZE_OR_ZERO,   /* number of allocated bytes requested */
     296             :         ARG_PTR_TO_BTF_ID_SOCK_COMMON,  /* pointer to in-kernel sock_common or bpf-mirrored bpf_sock */
     297             :         ARG_PTR_TO_PERCPU_BTF_ID,       /* pointer to in-kernel percpu type */
     298             :         __BPF_ARG_TYPE_MAX,
     299             : };
     300             : 
     301             : /* type of values returned from helper functions */
     302             : enum bpf_return_type {
     303             :         RET_INTEGER,                    /* function returns integer */
     304             :         RET_VOID,                       /* function doesn't return anything */
     305             :         RET_PTR_TO_MAP_VALUE,           /* returns a pointer to map elem value */
     306             :         RET_PTR_TO_MAP_VALUE_OR_NULL,   /* returns a pointer to map elem value or NULL */
     307             :         RET_PTR_TO_SOCKET_OR_NULL,      /* returns a pointer to a socket or NULL */
     308             :         RET_PTR_TO_TCP_SOCK_OR_NULL,    /* returns a pointer to a tcp_sock or NULL */
     309             :         RET_PTR_TO_SOCK_COMMON_OR_NULL, /* returns a pointer to a sock_common or NULL */
     310             :         RET_PTR_TO_ALLOC_MEM_OR_NULL,   /* returns a pointer to dynamically allocated memory or NULL */
     311             :         RET_PTR_TO_BTF_ID_OR_NULL,      /* returns a pointer to a btf_id or NULL */
     312             :         RET_PTR_TO_MEM_OR_BTF_ID_OR_NULL, /* returns a pointer to a valid memory or a btf_id or NULL */
     313             :         RET_PTR_TO_MEM_OR_BTF_ID,       /* returns a pointer to a valid memory or a btf_id */
     314             :         RET_PTR_TO_BTF_ID,              /* returns a pointer to a btf_id */
     315             : };
     316             : 
     317             : /* eBPF function prototype used by verifier to allow BPF_CALLs from eBPF programs
     318             :  * to in-kernel helper functions and for adjusting imm32 field in BPF_CALL
     319             :  * instructions after verifying
     320             :  */
     321             : struct bpf_func_proto {
     322             :         u64 (*func)(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5);
     323             :         bool gpl_only;
     324             :         bool pkt_access;
     325             :         enum bpf_return_type ret_type;
     326             :         union {
     327             :                 struct {
     328             :                         enum bpf_arg_type arg1_type;
     329             :                         enum bpf_arg_type arg2_type;
     330             :                         enum bpf_arg_type arg3_type;
     331             :                         enum bpf_arg_type arg4_type;
     332             :                         enum bpf_arg_type arg5_type;
     333             :                 };
     334             :                 enum bpf_arg_type arg_type[5];
     335             :         };
     336             :         union {
     337             :                 struct {
     338             :                         u32 *arg1_btf_id;
     339             :                         u32 *arg2_btf_id;
     340             :                         u32 *arg3_btf_id;
     341             :                         u32 *arg4_btf_id;
     342             :                         u32 *arg5_btf_id;
     343             :                 };
     344             :                 u32 *arg_btf_id[5];
     345             :         };
     346             :         int *ret_btf_id; /* return value btf_id */
     347             :         bool (*allowed)(const struct bpf_prog *prog);
     348             : };
     349             : 
     350             : /* bpf_context is intentionally undefined structure. Pointer to bpf_context is
     351             :  * the first argument to eBPF programs.
     352             :  * For socket filters: 'struct bpf_context *' == 'struct sk_buff *'
     353             :  */
     354             : struct bpf_context;
     355             : 
     356             : enum bpf_access_type {
     357             :         BPF_READ = 1,
     358             :         BPF_WRITE = 2
     359             : };
     360             : 
     361             : /* types of values stored in eBPF registers */
     362             : /* Pointer types represent:
     363             :  * pointer
     364             :  * pointer + imm
     365             :  * pointer + (u16) var
     366             :  * pointer + (u16) var + imm
     367             :  * if (range > 0) then [ptr, ptr + range - off) is safe to access
     368             :  * if (id > 0) means that some 'var' was added
     369             :  * if (off > 0) means that 'imm' was added
     370             :  */
     371             : enum bpf_reg_type {
     372             :         NOT_INIT = 0,            /* nothing was written into register */
     373             :         SCALAR_VALUE,            /* reg doesn't contain a valid pointer */
     374             :         PTR_TO_CTX,              /* reg points to bpf_context */
     375             :         CONST_PTR_TO_MAP,        /* reg points to struct bpf_map */
     376             :         PTR_TO_MAP_VALUE,        /* reg points to map element value */
     377             :         PTR_TO_MAP_VALUE_OR_NULL,/* points to map elem value or NULL */
     378             :         PTR_TO_STACK,            /* reg == frame_pointer + offset */
     379             :         PTR_TO_PACKET_META,      /* skb->data - meta_len */
     380             :         PTR_TO_PACKET,           /* reg points to skb->data */
     381             :         PTR_TO_PACKET_END,       /* skb->data + headlen */
     382             :         PTR_TO_FLOW_KEYS,        /* reg points to bpf_flow_keys */
     383             :         PTR_TO_SOCKET,           /* reg points to struct bpf_sock */
     384             :         PTR_TO_SOCKET_OR_NULL,   /* reg points to struct bpf_sock or NULL */
     385             :         PTR_TO_SOCK_COMMON,      /* reg points to sock_common */
     386             :         PTR_TO_SOCK_COMMON_OR_NULL, /* reg points to sock_common or NULL */
     387             :         PTR_TO_TCP_SOCK,         /* reg points to struct tcp_sock */
     388             :         PTR_TO_TCP_SOCK_OR_NULL, /* reg points to struct tcp_sock or NULL */
     389             :         PTR_TO_TP_BUFFER,        /* reg points to a writable raw tp's buffer */
     390             :         PTR_TO_XDP_SOCK,         /* reg points to struct xdp_sock */
     391             :         /* PTR_TO_BTF_ID points to a kernel struct that does not need
     392             :          * to be null checked by the BPF program. This does not imply the
     393             :          * pointer is _not_ null and in practice this can easily be a null
     394             :          * pointer when reading pointer chains. The assumption is program
     395             :          * context will handle null pointer dereference typically via fault
     396             :          * handling. The verifier must keep this in mind and can make no
     397             :          * assumptions about null or non-null when doing branch analysis.
     398             :          * Further, when passed into helpers the helpers can not, without
     399             :          * additional context, assume the value is non-null.
     400             :          */
     401             :         PTR_TO_BTF_ID,
     402             :         /* PTR_TO_BTF_ID_OR_NULL points to a kernel struct that has not
     403             :          * been checked for null. Used primarily to inform the verifier
     404             :          * an explicit null check is required for this struct.
     405             :          */
     406             :         PTR_TO_BTF_ID_OR_NULL,
     407             :         PTR_TO_MEM,              /* reg points to valid memory region */
     408             :         PTR_TO_MEM_OR_NULL,      /* reg points to valid memory region or NULL */
     409             :         PTR_TO_RDONLY_BUF,       /* reg points to a readonly buffer */
     410             :         PTR_TO_RDONLY_BUF_OR_NULL, /* reg points to a readonly buffer or NULL */
     411             :         PTR_TO_RDWR_BUF,         /* reg points to a read/write buffer */
     412             :         PTR_TO_RDWR_BUF_OR_NULL, /* reg points to a read/write buffer or NULL */
     413             :         PTR_TO_PERCPU_BTF_ID,    /* reg points to a percpu kernel variable */
     414             : };
     415             : 
     416             : /* The information passed from prog-specific *_is_valid_access
     417             :  * back to the verifier.
     418             :  */
     419             : struct bpf_insn_access_aux {
     420             :         enum bpf_reg_type reg_type;
     421             :         union {
     422             :                 int ctx_field_size;
     423             :                 struct {
     424             :                         struct btf *btf;
     425             :                         u32 btf_id;
     426             :                 };
     427             :         };
     428             :         struct bpf_verifier_log *log; /* for verbose logs */
     429             : };
     430             : 
     431             : static inline void
     432           0 : bpf_ctx_record_field_size(struct bpf_insn_access_aux *aux, u32 size)
     433             : {
     434           0 :         aux->ctx_field_size = size;
     435             : }
     436             : 
     437             : struct bpf_prog_ops {
     438             :         int (*test_run)(struct bpf_prog *prog, const union bpf_attr *kattr,
     439             :                         union bpf_attr __user *uattr);
     440             : };
     441             : 
     442             : struct bpf_verifier_ops {
     443             :         /* return eBPF function prototype for verification */
     444             :         const struct bpf_func_proto *
     445             :         (*get_func_proto)(enum bpf_func_id func_id,
     446             :                           const struct bpf_prog *prog);
     447             : 
     448             :         /* return true if 'size' wide access at offset 'off' within bpf_context
     449             :          * with 'type' (read or write) is allowed
     450             :          */
     451             :         bool (*is_valid_access)(int off, int size, enum bpf_access_type type,
     452             :                                 const struct bpf_prog *prog,
     453             :                                 struct bpf_insn_access_aux *info);
     454             :         int (*gen_prologue)(struct bpf_insn *insn, bool direct_write,
     455             :                             const struct bpf_prog *prog);
     456             :         int (*gen_ld_abs)(const struct bpf_insn *orig,
     457             :                           struct bpf_insn *insn_buf);
     458             :         u32 (*convert_ctx_access)(enum bpf_access_type type,
     459             :                                   const struct bpf_insn *src,
     460             :                                   struct bpf_insn *dst,
     461             :                                   struct bpf_prog *prog, u32 *target_size);
     462             :         int (*btf_struct_access)(struct bpf_verifier_log *log,
     463             :                                  const struct btf *btf,
     464             :                                  const struct btf_type *t, int off, int size,
     465             :                                  enum bpf_access_type atype,
     466             :                                  u32 *next_btf_id);
     467             : };
     468             : 
     469             : struct bpf_prog_offload_ops {
     470             :         /* verifier basic callbacks */
     471             :         int (*insn_hook)(struct bpf_verifier_env *env,
     472             :                          int insn_idx, int prev_insn_idx);
     473             :         int (*finalize)(struct bpf_verifier_env *env);
     474             :         /* verifier optimization callbacks (called after .finalize) */
     475             :         int (*replace_insn)(struct bpf_verifier_env *env, u32 off,
     476             :                             struct bpf_insn *insn);
     477             :         int (*remove_insns)(struct bpf_verifier_env *env, u32 off, u32 cnt);
     478             :         /* program management callbacks */
     479             :         int (*prepare)(struct bpf_prog *prog);
     480             :         int (*translate)(struct bpf_prog *prog);
     481             :         void (*destroy)(struct bpf_prog *prog);
     482             : };
     483             : 
     484             : struct bpf_prog_offload {
     485             :         struct bpf_prog         *prog;
     486             :         struct net_device       *netdev;
     487             :         struct bpf_offload_dev  *offdev;
     488             :         void                    *dev_priv;
     489             :         struct list_head        offloads;
     490             :         bool                    dev_state;
     491             :         bool                    opt_failed;
     492             :         void                    *jited_image;
     493             :         u32                     jited_len;
     494             : };
     495             : 
     496             : enum bpf_cgroup_storage_type {
     497             :         BPF_CGROUP_STORAGE_SHARED,
     498             :         BPF_CGROUP_STORAGE_PERCPU,
     499             :         __BPF_CGROUP_STORAGE_MAX
     500             : };
     501             : 
     502             : #define MAX_BPF_CGROUP_STORAGE_TYPE __BPF_CGROUP_STORAGE_MAX
     503             : 
     504             : /* The longest tracepoint has 12 args.
     505             :  * See include/trace/bpf_probe.h
     506             :  */
     507             : #define MAX_BPF_FUNC_ARGS 12
     508             : 
     509             : struct btf_func_model {
     510             :         u8 ret_size;
     511             :         u8 nr_args;
     512             :         u8 arg_size[MAX_BPF_FUNC_ARGS];
     513             : };
     514             : 
     515             : /* Restore arguments before returning from trampoline to let original function
     516             :  * continue executing. This flag is used for fentry progs when there are no
     517             :  * fexit progs.
     518             :  */
     519             : #define BPF_TRAMP_F_RESTORE_REGS        BIT(0)
     520             : /* Call original function after fentry progs, but before fexit progs.
     521             :  * Makes sense for fentry/fexit, normal calls and indirect calls.
     522             :  */
     523             : #define BPF_TRAMP_F_CALL_ORIG           BIT(1)
     524             : /* Skip current frame and return to parent.  Makes sense for fentry/fexit
     525             :  * programs only. Should not be used with normal calls and indirect calls.
     526             :  */
     527             : #define BPF_TRAMP_F_SKIP_FRAME          BIT(2)
     528             : 
     529             : /* Each call __bpf_prog_enter + call bpf_func + call __bpf_prog_exit is ~50
     530             :  * bytes on x86.  Pick a number to fit into BPF_IMAGE_SIZE / 2
     531             :  */
     532             : #define BPF_MAX_TRAMP_PROGS 38
     533             : 
     534             : struct bpf_tramp_progs {
     535             :         struct bpf_prog *progs[BPF_MAX_TRAMP_PROGS];
     536             :         int nr_progs;
     537             : };
     538             : 
     539             : /* Different use cases for BPF trampoline:
     540             :  * 1. replace nop at the function entry (kprobe equivalent)
     541             :  *    flags = BPF_TRAMP_F_RESTORE_REGS
     542             :  *    fentry = a set of programs to run before returning from trampoline
     543             :  *
     544             :  * 2. replace nop at the function entry (kprobe + kretprobe equivalent)
     545             :  *    flags = BPF_TRAMP_F_CALL_ORIG | BPF_TRAMP_F_SKIP_FRAME
     546             :  *    orig_call = fentry_ip + MCOUNT_INSN_SIZE
     547             :  *    fentry = a set of program to run before calling original function
     548             :  *    fexit = a set of program to run after original function
     549             :  *
     550             :  * 3. replace direct call instruction anywhere in the function body
     551             :  *    or assign a function pointer for indirect call (like tcp_congestion_ops->cong_avoid)
     552             :  *    With flags = 0
     553             :  *      fentry = a set of programs to run before returning from trampoline
     554             :  *    With flags = BPF_TRAMP_F_CALL_ORIG
     555             :  *      orig_call = original callback addr or direct function addr
     556             :  *      fentry = a set of program to run before calling original function
     557             :  *      fexit = a set of program to run after original function
     558             :  */
     559             : int arch_prepare_bpf_trampoline(void *image, void *image_end,
     560             :                                 const struct btf_func_model *m, u32 flags,
     561             :                                 struct bpf_tramp_progs *tprogs,
     562             :                                 void *orig_call);
     563             : /* these two functions are called from generated trampoline */
     564             : u64 notrace __bpf_prog_enter(struct bpf_prog *prog);
     565             : void notrace __bpf_prog_exit(struct bpf_prog *prog, u64 start);
     566             : u64 notrace __bpf_prog_enter_sleepable(struct bpf_prog *prog);
     567             : void notrace __bpf_prog_exit_sleepable(struct bpf_prog *prog, u64 start);
     568             : 
     569             : struct bpf_ksym {
     570             :         unsigned long            start;
     571             :         unsigned long            end;
     572             :         char                     name[KSYM_NAME_LEN];
     573             :         struct list_head         lnode;
     574             :         struct latch_tree_node   tnode;
     575             :         bool                     prog;
     576             : };
     577             : 
     578             : enum bpf_tramp_prog_type {
     579             :         BPF_TRAMP_FENTRY,
     580             :         BPF_TRAMP_FEXIT,
     581             :         BPF_TRAMP_MODIFY_RETURN,
     582             :         BPF_TRAMP_MAX,
     583             :         BPF_TRAMP_REPLACE, /* more than MAX */
     584             : };
     585             : 
     586             : struct bpf_trampoline {
     587             :         /* hlist for trampoline_table */
     588             :         struct hlist_node hlist;
     589             :         /* serializes access to fields of this trampoline */
     590             :         struct mutex mutex;
     591             :         refcount_t refcnt;
     592             :         u64 key;
     593             :         struct {
     594             :                 struct btf_func_model model;
     595             :                 void *addr;
     596             :                 bool ftrace_managed;
     597             :         } func;
     598             :         /* if !NULL this is BPF_PROG_TYPE_EXT program that extends another BPF
     599             :          * program by replacing one of its functions. func.addr is the address
     600             :          * of the function it replaced.
     601             :          */
     602             :         struct bpf_prog *extension_prog;
     603             :         /* list of BPF programs using this trampoline */
     604             :         struct hlist_head progs_hlist[BPF_TRAMP_MAX];
     605             :         /* Number of attached programs. A counter per kind. */
     606             :         int progs_cnt[BPF_TRAMP_MAX];
     607             :         /* Executable image of trampoline */
     608             :         void *image;
     609             :         u64 selector;
     610             :         struct bpf_ksym ksym;
     611             : };
     612             : 
     613             : struct bpf_attach_target_info {
     614             :         struct btf_func_model fmodel;
     615             :         long tgt_addr;
     616             :         const char *tgt_name;
     617             :         const struct btf_type *tgt_type;
     618             : };
     619             : 
     620             : #define BPF_DISPATCHER_MAX 48 /* Fits in 2048B */
     621             : 
     622             : struct bpf_dispatcher_prog {
     623             :         struct bpf_prog *prog;
     624             :         refcount_t users;
     625             : };
     626             : 
     627             : struct bpf_dispatcher {
     628             :         /* dispatcher mutex */
     629             :         struct mutex mutex;
     630             :         void *func;
     631             :         struct bpf_dispatcher_prog progs[BPF_DISPATCHER_MAX];
     632             :         int num_progs;
     633             :         void *image;
     634             :         u32 image_off;
     635             :         struct bpf_ksym ksym;
     636             : };
     637             : 
     638        1094 : static __always_inline unsigned int bpf_dispatcher_nop_func(
     639             :         const void *ctx,
     640             :         const struct bpf_insn *insnsi,
     641             :         unsigned int (*bpf_func)(const void *,
     642             :                                  const struct bpf_insn *))
     643             : {
     644        1094 :         return bpf_func(ctx, insnsi);
     645             : }
     646             : #ifdef CONFIG_BPF_JIT
     647             : int bpf_trampoline_link_prog(struct bpf_prog *prog, struct bpf_trampoline *tr);
     648             : int bpf_trampoline_unlink_prog(struct bpf_prog *prog, struct bpf_trampoline *tr);
     649             : struct bpf_trampoline *bpf_trampoline_get(u64 key,
     650             :                                           struct bpf_attach_target_info *tgt_info);
     651             : void bpf_trampoline_put(struct bpf_trampoline *tr);
     652             : #define BPF_DISPATCHER_INIT(_name) {                            \
     653             :         .mutex = __MUTEX_INITIALIZER(_name.mutex),              \
     654             :         .func = &_name##_func,                                      \
     655             :         .progs = {},                                            \
     656             :         .num_progs = 0,                                         \
     657             :         .image = NULL,                                          \
     658             :         .image_off = 0,                                         \
     659             :         .ksym = {                                               \
     660             :                 .name  = #_name,                                \
     661             :                 .lnode = LIST_HEAD_INIT(_name.ksym.lnode),      \
     662             :         },                                                      \
     663             : }
     664             : 
     665             : #define DEFINE_BPF_DISPATCHER(name)                                     \
     666             :         noinline unsigned int bpf_dispatcher_##name##_func(             \
     667             :                 const void *ctx,                                        \
     668             :                 const struct bpf_insn *insnsi,                          \
     669             :                 unsigned int (*bpf_func)(const void *,                  \
     670             :                                          const struct bpf_insn *))      \
     671             :         {                                                               \
     672             :                 return bpf_func(ctx, insnsi);                           \
     673             :         }                                                               \
     674             :         EXPORT_SYMBOL(bpf_dispatcher_##name##_func);                    \
     675             :         struct bpf_dispatcher bpf_dispatcher_##name =                   \
     676             :                 BPF_DISPATCHER_INIT(bpf_dispatcher_##name);
     677             : #define DECLARE_BPF_DISPATCHER(name)                                    \
     678             :         unsigned int bpf_dispatcher_##name##_func(                      \
     679             :                 const void *ctx,                                        \
     680             :                 const struct bpf_insn *insnsi,                          \
     681             :                 unsigned int (*bpf_func)(const void *,                  \
     682             :                                          const struct bpf_insn *));     \
     683             :         extern struct bpf_dispatcher bpf_dispatcher_##name;
     684             : #define BPF_DISPATCHER_FUNC(name) bpf_dispatcher_##name##_func
     685             : #define BPF_DISPATCHER_PTR(name) (&bpf_dispatcher_##name)
     686             : void bpf_dispatcher_change_prog(struct bpf_dispatcher *d, struct bpf_prog *from,
     687             :                                 struct bpf_prog *to);
     688             : /* Called only from JIT-enabled code, so there's no need for stubs. */
     689             : void *bpf_jit_alloc_exec_page(void);
     690             : void bpf_image_ksym_add(void *data, struct bpf_ksym *ksym);
     691             : void bpf_image_ksym_del(struct bpf_ksym *ksym);
     692             : void bpf_ksym_add(struct bpf_ksym *ksym);
     693             : void bpf_ksym_del(struct bpf_ksym *ksym);
     694             : #else
     695             : static inline int bpf_trampoline_link_prog(struct bpf_prog *prog,
     696             :                                            struct bpf_trampoline *tr)
     697             : {
     698             :         return -ENOTSUPP;
     699             : }
     700             : static inline int bpf_trampoline_unlink_prog(struct bpf_prog *prog,
     701             :                                              struct bpf_trampoline *tr)
     702             : {
     703             :         return -ENOTSUPP;
     704             : }
     705             : static inline struct bpf_trampoline *bpf_trampoline_get(u64 key,
     706             :                                                         struct bpf_attach_target_info *tgt_info)
     707             : {
     708             :         return ERR_PTR(-EOPNOTSUPP);
     709             : }
     710             : static inline void bpf_trampoline_put(struct bpf_trampoline *tr) {}
     711             : #define DEFINE_BPF_DISPATCHER(name)
     712             : #define DECLARE_BPF_DISPATCHER(name)
     713             : #define BPF_DISPATCHER_FUNC(name) bpf_dispatcher_nop_func
     714             : #define BPF_DISPATCHER_PTR(name) NULL
     715           0 : static inline void bpf_dispatcher_change_prog(struct bpf_dispatcher *d,
     716             :                                               struct bpf_prog *from,
     717           0 :                                               struct bpf_prog *to) {}
     718             : static inline bool is_bpf_image_address(unsigned long address)
     719             : {
     720             :         return false;
     721             : }
     722             : #endif
     723             : 
     724             : struct bpf_func_info_aux {
     725             :         u16 linkage;
     726             :         bool unreliable;
     727             : };
     728             : 
     729             : enum bpf_jit_poke_reason {
     730             :         BPF_POKE_REASON_TAIL_CALL,
     731             : };
     732             : 
     733             : /* Descriptor of pokes pointing /into/ the JITed image. */
     734             : struct bpf_jit_poke_descriptor {
     735             :         void *tailcall_target;
     736             :         void *tailcall_bypass;
     737             :         void *bypass_addr;
     738             :         union {
     739             :                 struct {
     740             :                         struct bpf_map *map;
     741             :                         u32 key;
     742             :                 } tail_call;
     743             :         };
     744             :         bool tailcall_target_stable;
     745             :         u8 adj_off;
     746             :         u16 reason;
     747             :         u32 insn_idx;
     748             : };
     749             : 
     750             : /* reg_type info for ctx arguments */
     751             : struct bpf_ctx_arg_aux {
     752             :         u32 offset;
     753             :         enum bpf_reg_type reg_type;
     754             :         u32 btf_id;
     755             : };
     756             : 
     757             : struct btf_mod_pair {
     758             :         struct btf *btf;
     759             :         struct module *module;
     760             : };
     761             : 
     762             : struct bpf_prog_aux {
     763             :         atomic64_t refcnt;
     764             :         u32 used_map_cnt;
     765             :         u32 used_btf_cnt;
     766             :         u32 max_ctx_offset;
     767             :         u32 max_pkt_offset;
     768             :         u32 max_tp_access;
     769             :         u32 stack_depth;
     770             :         u32 id;
     771             :         u32 func_cnt; /* used by non-func prog as the number of func progs */
     772             :         u32 func_idx; /* 0 for non-func prog, the index in func array for func prog */
     773             :         u32 attach_btf_id; /* in-kernel BTF type id to attach to */
     774             :         u32 ctx_arg_info_size;
     775             :         u32 max_rdonly_access;
     776             :         u32 max_rdwr_access;
     777             :         struct btf *attach_btf;
     778             :         const struct bpf_ctx_arg_aux *ctx_arg_info;
     779             :         struct mutex dst_mutex; /* protects dst_* pointers below, *after* prog becomes visible */
     780             :         struct bpf_prog *dst_prog;
     781             :         struct bpf_trampoline *dst_trampoline;
     782             :         enum bpf_prog_type saved_dst_prog_type;
     783             :         enum bpf_attach_type saved_dst_attach_type;
     784             :         bool verifier_zext; /* Zero extensions has been inserted by verifier. */
     785             :         bool offload_requested;
     786             :         bool attach_btf_trace; /* true if attaching to BTF-enabled raw tp */
     787             :         bool func_proto_unreliable;
     788             :         bool sleepable;
     789             :         bool tail_call_reachable;
     790             :         enum bpf_tramp_prog_type trampoline_prog_type;
     791             :         struct hlist_node tramp_hlist;
     792             :         /* BTF_KIND_FUNC_PROTO for valid attach_btf_id */
     793             :         const struct btf_type *attach_func_proto;
     794             :         /* function name for valid attach_btf_id */
     795             :         const char *attach_func_name;
     796             :         struct bpf_prog **func;
     797             :         void *jit_data; /* JIT specific data. arch dependent */
     798             :         struct bpf_jit_poke_descriptor *poke_tab;
     799             :         u32 size_poke_tab;
     800             :         struct bpf_ksym ksym;
     801             :         const struct bpf_prog_ops *ops;
     802             :         struct bpf_map **used_maps;
     803             :         struct mutex used_maps_mutex; /* mutex for used_maps and used_map_cnt */
     804             :         struct btf_mod_pair *used_btfs;
     805             :         struct bpf_prog *prog;
     806             :         struct user_struct *user;
     807             :         u64 load_time; /* ns since boottime */
     808             :         struct bpf_map *cgroup_storage[MAX_BPF_CGROUP_STORAGE_TYPE];
     809             :         char name[BPF_OBJ_NAME_LEN];
     810             : #ifdef CONFIG_SECURITY
     811             :         void *security;
     812             : #endif
     813             :         struct bpf_prog_offload *offload;
     814             :         struct btf *btf;
     815             :         struct bpf_func_info *func_info;
     816             :         struct bpf_func_info_aux *func_info_aux;
     817             :         /* bpf_line_info loaded from userspace.  linfo->insn_off
     818             :          * has the xlated insn offset.
     819             :          * Both the main and sub prog share the same linfo.
     820             :          * The subprog can access its first linfo by
     821             :          * using the linfo_idx.
     822             :          */
     823             :         struct bpf_line_info *linfo;
     824             :         /* jited_linfo is the jited addr of the linfo.  It has a
     825             :          * one to one mapping to linfo:
     826             :          * jited_linfo[i] is the jited addr for the linfo[i]->insn_off.
     827             :          * Both the main and sub prog share the same jited_linfo.
     828             :          * The subprog can access its first jited_linfo by
     829             :          * using the linfo_idx.
     830             :          */
     831             :         void **jited_linfo;
     832             :         u32 func_info_cnt;
     833             :         u32 nr_linfo;
     834             :         /* subprog can use linfo_idx to access its first linfo and
     835             :          * jited_linfo.
     836             :          * main prog always has linfo_idx == 0
     837             :          */
     838             :         u32 linfo_idx;
     839             :         u32 num_exentries;
     840             :         struct exception_table_entry *extable;
     841             :         union {
     842             :                 struct work_struct work;
     843             :                 struct rcu_head rcu;
     844             :         };
     845             : };
     846             : 
     847             : struct bpf_array_aux {
     848             :         /* 'Ownership' of prog array is claimed by the first program that
     849             :          * is going to use this map or by the first program which FD is
     850             :          * stored in the map to make sure that all callers and callees have
     851             :          * the same prog type and JITed flag.
     852             :          */
     853             :         enum bpf_prog_type type;
     854             :         bool jited;
     855             :         /* Programs with direct jumps into programs part of this array. */
     856             :         struct list_head poke_progs;
     857             :         struct bpf_map *map;
     858             :         struct mutex poke_mutex;
     859             :         struct work_struct work;
     860             : };
     861             : 
     862             : struct bpf_link {
     863             :         atomic64_t refcnt;
     864             :         u32 id;
     865             :         enum bpf_link_type type;
     866             :         const struct bpf_link_ops *ops;
     867             :         struct bpf_prog *prog;
     868             :         struct work_struct work;
     869             : };
     870             : 
     871             : struct bpf_link_ops {
     872             :         void (*release)(struct bpf_link *link);
     873             :         void (*dealloc)(struct bpf_link *link);
     874             :         int (*detach)(struct bpf_link *link);
     875             :         int (*update_prog)(struct bpf_link *link, struct bpf_prog *new_prog,
     876             :                            struct bpf_prog *old_prog);
     877             :         void (*show_fdinfo)(const struct bpf_link *link, struct seq_file *seq);
     878             :         int (*fill_link_info)(const struct bpf_link *link,
     879             :                               struct bpf_link_info *info);
     880             : };
     881             : 
     882             : struct bpf_link_primer {
     883             :         struct bpf_link *link;
     884             :         struct file *file;
     885             :         int fd;
     886             :         u32 id;
     887             : };
     888             : 
     889             : struct bpf_struct_ops_value;
     890             : struct btf_type;
     891             : struct btf_member;
     892             : 
     893             : #define BPF_STRUCT_OPS_MAX_NR_MEMBERS 64
     894             : struct bpf_struct_ops {
     895             :         const struct bpf_verifier_ops *verifier_ops;
     896             :         int (*init)(struct btf *btf);
     897             :         int (*check_member)(const struct btf_type *t,
     898             :                             const struct btf_member *member);
     899             :         int (*init_member)(const struct btf_type *t,
     900             :                            const struct btf_member *member,
     901             :                            void *kdata, const void *udata);
     902             :         int (*reg)(void *kdata);
     903             :         void (*unreg)(void *kdata);
     904             :         const struct btf_type *type;
     905             :         const struct btf_type *value_type;
     906             :         const char *name;
     907             :         struct btf_func_model func_models[BPF_STRUCT_OPS_MAX_NR_MEMBERS];
     908             :         u32 type_id;
     909             :         u32 value_id;
     910             : };
     911             : 
     912             : #if defined(CONFIG_BPF_JIT) && defined(CONFIG_BPF_SYSCALL)
     913             : #define BPF_MODULE_OWNER ((void *)((0xeB9FUL << 2) + POISON_POINTER_DELTA))
     914             : const struct bpf_struct_ops *bpf_struct_ops_find(u32 type_id);
     915             : void bpf_struct_ops_init(struct btf *btf, struct bpf_verifier_log *log);
     916             : bool bpf_struct_ops_get(const void *kdata);
     917             : void bpf_struct_ops_put(const void *kdata);
     918             : int bpf_struct_ops_map_sys_lookup_elem(struct bpf_map *map, void *key,
     919             :                                        void *value);
     920             : static inline bool bpf_try_module_get(const void *data, struct module *owner)
     921             : {
     922             :         if (owner == BPF_MODULE_OWNER)
     923             :                 return bpf_struct_ops_get(data);
     924             :         else
     925             :                 return try_module_get(owner);
     926             : }
     927             : static inline void bpf_module_put(const void *data, struct module *owner)
     928             : {
     929             :         if (owner == BPF_MODULE_OWNER)
     930             :                 bpf_struct_ops_put(data);
     931             :         else
     932             :                 module_put(owner);
     933             : }
     934             : #else
     935             : static inline const struct bpf_struct_ops *bpf_struct_ops_find(u32 type_id)
     936             : {
     937             :         return NULL;
     938             : }
     939             : static inline void bpf_struct_ops_init(struct btf *btf,
     940             :                                        struct bpf_verifier_log *log)
     941             : {
     942             : }
     943           8 : static inline bool bpf_try_module_get(const void *data, struct module *owner)
     944             : {
     945          12 :         return try_module_get(owner);
     946             : }
     947           4 : static inline void bpf_module_put(const void *data, struct module *owner)
     948             : {
     949           0 :         module_put(owner);
     950             : }
     951             : static inline int bpf_struct_ops_map_sys_lookup_elem(struct bpf_map *map,
     952             :                                                      void *key,
     953             :                                                      void *value)
     954             : {
     955             :         return -EINVAL;
     956             : }
     957             : #endif
     958             : 
     959             : struct bpf_array {
     960             :         struct bpf_map map;
     961             :         u32 elem_size;
     962             :         u32 index_mask;
     963             :         struct bpf_array_aux *aux;
     964             :         union {
     965             :                 char value[0] __aligned(8);
     966             :                 void *ptrs[0] __aligned(8);
     967             :                 void __percpu *pptrs[0] __aligned(8);
     968             :         };
     969             : };
     970             : 
     971             : #define BPF_COMPLEXITY_LIMIT_INSNS      1000000 /* yes. 1M insns */
     972             : #define MAX_TAIL_CALL_CNT 32
     973             : 
     974             : #define BPF_F_ACCESS_MASK       (BPF_F_RDONLY |         \
     975             :                                  BPF_F_RDONLY_PROG |    \
     976             :                                  BPF_F_WRONLY |         \
     977             :                                  BPF_F_WRONLY_PROG)
     978             : 
     979             : #define BPF_MAP_CAN_READ        BIT(0)
     980             : #define BPF_MAP_CAN_WRITE       BIT(1)
     981             : 
     982             : static inline u32 bpf_map_flags_to_cap(struct bpf_map *map)
     983             : {
     984             :         u32 access_flags = map->map_flags & (BPF_F_RDONLY_PROG | BPF_F_WRONLY_PROG);
     985             : 
     986             :         /* Combination of BPF_F_RDONLY_PROG | BPF_F_WRONLY_PROG is
     987             :          * not possible.
     988             :          */
     989             :         if (access_flags & BPF_F_RDONLY_PROG)
     990             :                 return BPF_MAP_CAN_READ;
     991             :         else if (access_flags & BPF_F_WRONLY_PROG)
     992             :                 return BPF_MAP_CAN_WRITE;
     993             :         else
     994             :                 return BPF_MAP_CAN_READ | BPF_MAP_CAN_WRITE;
     995             : }
     996             : 
     997             : static inline bool bpf_map_flags_access_ok(u32 access_flags)
     998             : {
     999             :         return (access_flags & (BPF_F_RDONLY_PROG | BPF_F_WRONLY_PROG)) !=
    1000             :                (BPF_F_RDONLY_PROG | BPF_F_WRONLY_PROG);
    1001             : }
    1002             : 
    1003             : struct bpf_event_entry {
    1004             :         struct perf_event *event;
    1005             :         struct file *perf_file;
    1006             :         struct file *map_file;
    1007             :         struct rcu_head rcu;
    1008             : };
    1009             : 
    1010             : bool bpf_prog_array_compatible(struct bpf_array *array, const struct bpf_prog *fp);
    1011             : int bpf_prog_calc_tag(struct bpf_prog *fp);
    1012             : 
    1013             : const struct bpf_func_proto *bpf_get_trace_printk_proto(void);
    1014             : 
    1015             : typedef unsigned long (*bpf_ctx_copy_t)(void *dst, const void *src,
    1016             :                                         unsigned long off, unsigned long len);
    1017             : typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type type,
    1018             :                                         const struct bpf_insn *src,
    1019             :                                         struct bpf_insn *dst,
    1020             :                                         struct bpf_prog *prog,
    1021             :                                         u32 *target_size);
    1022             : 
    1023             : u64 bpf_event_output(struct bpf_map *map, u64 flags, void *meta, u64 meta_size,
    1024             :                      void *ctx, u64 ctx_size, bpf_ctx_copy_t ctx_copy);
    1025             : 
    1026             : /* an array of programs to be executed under rcu_lock.
    1027             :  *
    1028             :  * Typical usage:
    1029             :  * ret = BPF_PROG_RUN_ARRAY(&bpf_prog_array, ctx, BPF_PROG_RUN);
    1030             :  *
    1031             :  * the structure returned by bpf_prog_array_alloc() should be populated
    1032             :  * with program pointers and the last pointer must be NULL.
    1033             :  * The user has to keep refcnt on the program and make sure the program
    1034             :  * is removed from the array before bpf_prog_put().
    1035             :  * The 'struct bpf_prog_array *' should only be replaced with xchg()
    1036             :  * since other cpus are walking the array of pointers in parallel.
    1037             :  */
    1038             : struct bpf_prog_array_item {
    1039             :         struct bpf_prog *prog;
    1040             :         struct bpf_cgroup_storage *cgroup_storage[MAX_BPF_CGROUP_STORAGE_TYPE];
    1041             : };
    1042             : 
    1043             : struct bpf_prog_array {
    1044             :         struct rcu_head rcu;
    1045             :         struct bpf_prog_array_item items[];
    1046             : };
    1047             : 
    1048             : struct bpf_prog_array *bpf_prog_array_alloc(u32 prog_cnt, gfp_t flags);
    1049             : void bpf_prog_array_free(struct bpf_prog_array *progs);
    1050             : int bpf_prog_array_length(struct bpf_prog_array *progs);
    1051             : bool bpf_prog_array_is_empty(struct bpf_prog_array *array);
    1052             : int bpf_prog_array_copy_to_user(struct bpf_prog_array *progs,
    1053             :                                 __u32 __user *prog_ids, u32 cnt);
    1054             : 
    1055             : void bpf_prog_array_delete_safe(struct bpf_prog_array *progs,
    1056             :                                 struct bpf_prog *old_prog);
    1057             : int bpf_prog_array_delete_safe_at(struct bpf_prog_array *array, int index);
    1058             : int bpf_prog_array_update_at(struct bpf_prog_array *array, int index,
    1059             :                              struct bpf_prog *prog);
    1060             : int bpf_prog_array_copy_info(struct bpf_prog_array *array,
    1061             :                              u32 *prog_ids, u32 request_cnt,
    1062             :                              u32 *prog_cnt);
    1063             : int bpf_prog_array_copy(struct bpf_prog_array *old_array,
    1064             :                         struct bpf_prog *exclude_prog,
    1065             :                         struct bpf_prog *include_prog,
    1066             :                         struct bpf_prog_array **new_array);
    1067             : 
    1068             : /* BPF program asks to bypass CAP_NET_BIND_SERVICE in bind. */
    1069             : #define BPF_RET_BIND_NO_CAP_NET_BIND_SERVICE                    (1 << 0)
    1070             : /* BPF program asks to set CN on the packet. */
    1071             : #define BPF_RET_SET_CN                                          (1 << 0)
    1072             : 
    1073             : #define BPF_PROG_RUN_ARRAY_FLAGS(array, ctx, func, ret_flags)           \
    1074             :         ({                                                              \
    1075             :                 struct bpf_prog_array_item *_item;                      \
    1076             :                 struct bpf_prog *_prog;                                 \
    1077             :                 struct bpf_prog_array *_array;                          \
    1078             :                 u32 _ret = 1;                                           \
    1079             :                 u32 func_ret;                                           \
    1080             :                 migrate_disable();                                      \
    1081             :                 rcu_read_lock();                                        \
    1082             :                 _array = rcu_dereference(array);                        \
    1083             :                 _item = &_array->items[0];                               \
    1084             :                 while ((_prog = READ_ONCE(_item->prog))) {           \
    1085             :                         bpf_cgroup_storage_set(_item->cgroup_storage);       \
    1086             :                         func_ret = func(_prog, ctx);                    \
    1087             :                         _ret &= (func_ret & 1);                         \
    1088             :                         *(ret_flags) |= (func_ret >> 1);                  \
    1089             :                         _item++;                                        \
    1090             :                 }                                                       \
    1091             :                 rcu_read_unlock();                                      \
    1092             :                 migrate_enable();                                       \
    1093             :                 _ret;                                                   \
    1094             :          })
    1095             : 
    1096             : #define __BPF_PROG_RUN_ARRAY(array, ctx, func, check_non_null)  \
    1097             :         ({                                              \
    1098             :                 struct bpf_prog_array_item *_item;      \
    1099             :                 struct bpf_prog *_prog;                 \
    1100             :                 struct bpf_prog_array *_array;          \
    1101             :                 u32 _ret = 1;                           \
    1102             :                 migrate_disable();                      \
    1103             :                 rcu_read_lock();                        \
    1104             :                 _array = rcu_dereference(array);        \
    1105             :                 if (unlikely(check_non_null && !_array))\
    1106             :                         goto _out;                      \
    1107             :                 _item = &_array->items[0];               \
    1108             :                 while ((_prog = READ_ONCE(_item->prog))) {           \
    1109             :                         bpf_cgroup_storage_set(_item->cgroup_storage);       \
    1110             :                         _ret &= func(_prog, ctx);   \
    1111             :                         _item++;                        \
    1112             :                 }                                       \
    1113             : _out:                                                   \
    1114             :                 rcu_read_unlock();                      \
    1115             :                 migrate_enable();                       \
    1116             :                 _ret;                                   \
    1117             :          })
    1118             : 
    1119             : /* To be used by __cgroup_bpf_run_filter_skb for EGRESS BPF progs
    1120             :  * so BPF programs can request cwr for TCP packets.
    1121             :  *
    1122             :  * Current cgroup skb programs can only return 0 or 1 (0 to drop the
    1123             :  * packet. This macro changes the behavior so the low order bit
    1124             :  * indicates whether the packet should be dropped (0) or not (1)
    1125             :  * and the next bit is a congestion notification bit. This could be
    1126             :  * used by TCP to call tcp_enter_cwr()
    1127             :  *
    1128             :  * Hence, new allowed return values of CGROUP EGRESS BPF programs are:
    1129             :  *   0: drop packet
    1130             :  *   1: keep packet
    1131             :  *   2: drop packet and cn
    1132             :  *   3: keep packet and cn
    1133             :  *
    1134             :  * This macro then converts it to one of the NET_XMIT or an error
    1135             :  * code that is then interpreted as drop packet (and no cn):
    1136             :  *   0: NET_XMIT_SUCCESS  skb should be transmitted
    1137             :  *   1: NET_XMIT_DROP     skb should be dropped and cn
    1138             :  *   2: NET_XMIT_CN       skb should be transmitted and cn
    1139             :  *   3: -EPERM            skb should be dropped
    1140             :  */
    1141             : #define BPF_PROG_CGROUP_INET_EGRESS_RUN_ARRAY(array, ctx, func)         \
    1142             :         ({                                              \
    1143             :                 u32 _flags = 0;                         \
    1144             :                 bool _cn;                               \
    1145             :                 u32 _ret;                               \
    1146             :                 _ret = BPF_PROG_RUN_ARRAY_FLAGS(array, ctx, func, &_flags); \
    1147             :                 _cn = _flags & BPF_RET_SET_CN;              \
    1148             :                 if (_ret)                               \
    1149             :                         _ret = (_cn ? NET_XMIT_CN : NET_XMIT_SUCCESS);  \
    1150             :                 else                                    \
    1151             :                         _ret = (_cn ? NET_XMIT_DROP : -EPERM);          \
    1152             :                 _ret;                                   \
    1153             :         })
    1154             : 
    1155             : #define BPF_PROG_RUN_ARRAY(array, ctx, func)            \
    1156             :         __BPF_PROG_RUN_ARRAY(array, ctx, func, false)
    1157             : 
    1158             : #define BPF_PROG_RUN_ARRAY_CHECK(array, ctx, func)      \
    1159             :         __BPF_PROG_RUN_ARRAY(array, ctx, func, true)
    1160             : 
    1161             : #ifdef CONFIG_BPF_SYSCALL
    1162             : DECLARE_PER_CPU(int, bpf_prog_active);
    1163             : extern struct mutex bpf_stats_enabled_mutex;
    1164             : 
    1165             : /*
    1166             :  * Block execution of BPF programs attached to instrumentation (perf,
    1167             :  * kprobes, tracepoints) to prevent deadlocks on map operations as any of
    1168             :  * these events can happen inside a region which holds a map bucket lock
    1169             :  * and can deadlock on it.
    1170             :  *
    1171             :  * Use the preemption safe inc/dec variants on RT because migrate disable
    1172             :  * is preemptible on RT and preemption in the middle of the RMW operation
    1173             :  * might lead to inconsistent state. Use the raw variants for non RT
    1174             :  * kernels as migrate_disable() maps to preempt_disable() so the slightly
    1175             :  * more expensive save operation can be avoided.
    1176             :  */
    1177             : static inline void bpf_disable_instrumentation(void)
    1178             : {
    1179             :         migrate_disable();
    1180             :         if (IS_ENABLED(CONFIG_PREEMPT_RT))
    1181             :                 this_cpu_inc(bpf_prog_active);
    1182             :         else
    1183             :                 __this_cpu_inc(bpf_prog_active);
    1184             : }
    1185             : 
    1186             : static inline void bpf_enable_instrumentation(void)
    1187             : {
    1188             :         if (IS_ENABLED(CONFIG_PREEMPT_RT))
    1189             :                 this_cpu_dec(bpf_prog_active);
    1190             :         else
    1191             :                 __this_cpu_dec(bpf_prog_active);
    1192             :         migrate_enable();
    1193             : }
    1194             : 
    1195             : extern const struct file_operations bpf_map_fops;
    1196             : extern const struct file_operations bpf_prog_fops;
    1197             : extern const struct file_operations bpf_iter_fops;
    1198             : 
    1199             : #define BPF_PROG_TYPE(_id, _name, prog_ctx_type, kern_ctx_type) \
    1200             :         extern const struct bpf_prog_ops _name ## _prog_ops; \
    1201             :         extern const struct bpf_verifier_ops _name ## _verifier_ops;
    1202             : #define BPF_MAP_TYPE(_id, _ops) \
    1203             :         extern const struct bpf_map_ops _ops;
    1204             : #define BPF_LINK_TYPE(_id, _name)
    1205             : #include <linux/bpf_types.h>
    1206             : #undef BPF_PROG_TYPE
    1207             : #undef BPF_MAP_TYPE
    1208             : #undef BPF_LINK_TYPE
    1209             : 
    1210             : extern const struct bpf_prog_ops bpf_offload_prog_ops;
    1211             : extern const struct bpf_verifier_ops tc_cls_act_analyzer_ops;
    1212             : extern const struct bpf_verifier_ops xdp_analyzer_ops;
    1213             : 
    1214             : struct bpf_prog *bpf_prog_get(u32 ufd);
    1215             : struct bpf_prog *bpf_prog_get_type_dev(u32 ufd, enum bpf_prog_type type,
    1216             :                                        bool attach_drv);
    1217             : void bpf_prog_add(struct bpf_prog *prog, int i);
    1218             : void bpf_prog_sub(struct bpf_prog *prog, int i);
    1219             : void bpf_prog_inc(struct bpf_prog *prog);
    1220             : struct bpf_prog * __must_check bpf_prog_inc_not_zero(struct bpf_prog *prog);
    1221             : void bpf_prog_put(struct bpf_prog *prog);
    1222             : 
    1223             : void bpf_prog_free_id(struct bpf_prog *prog, bool do_idr_lock);
    1224             : void bpf_map_free_id(struct bpf_map *map, bool do_idr_lock);
    1225             : 
    1226             : struct bpf_map *bpf_map_get(u32 ufd);
    1227             : struct bpf_map *bpf_map_get_with_uref(u32 ufd);
    1228             : struct bpf_map *__bpf_map_get(struct fd f);
    1229             : void bpf_map_inc(struct bpf_map *map);
    1230             : void bpf_map_inc_with_uref(struct bpf_map *map);
    1231             : struct bpf_map * __must_check bpf_map_inc_not_zero(struct bpf_map *map);
    1232             : void bpf_map_put_with_uref(struct bpf_map *map);
    1233             : void bpf_map_put(struct bpf_map *map);
    1234             : void *bpf_map_area_alloc(u64 size, int numa_node);
    1235             : void *bpf_map_area_mmapable_alloc(u64 size, int numa_node);
    1236             : void bpf_map_area_free(void *base);
    1237             : void bpf_map_init_from_attr(struct bpf_map *map, union bpf_attr *attr);
    1238             : int  generic_map_lookup_batch(struct bpf_map *map,
    1239             :                               const union bpf_attr *attr,
    1240             :                               union bpf_attr __user *uattr);
    1241             : int  generic_map_update_batch(struct bpf_map *map,
    1242             :                               const union bpf_attr *attr,
    1243             :                               union bpf_attr __user *uattr);
    1244             : int  generic_map_delete_batch(struct bpf_map *map,
    1245             :                               const union bpf_attr *attr,
    1246             :                               union bpf_attr __user *uattr);
    1247             : struct bpf_map *bpf_map_get_curr_or_next(u32 *id);
    1248             : struct bpf_prog *bpf_prog_get_curr_or_next(u32 *id);
    1249             : 
    1250             : #ifdef CONFIG_MEMCG_KMEM
    1251             : void *bpf_map_kmalloc_node(const struct bpf_map *map, size_t size, gfp_t flags,
    1252             :                            int node);
    1253             : void *bpf_map_kzalloc(const struct bpf_map *map, size_t size, gfp_t flags);
    1254             : void __percpu *bpf_map_alloc_percpu(const struct bpf_map *map, size_t size,
    1255             :                                     size_t align, gfp_t flags);
    1256             : #else
    1257             : static inline void *
    1258             : bpf_map_kmalloc_node(const struct bpf_map *map, size_t size, gfp_t flags,
    1259             :                      int node)
    1260             : {
    1261             :         return kmalloc_node(size, flags, node);
    1262             : }
    1263             : 
    1264             : static inline void *
    1265             : bpf_map_kzalloc(const struct bpf_map *map, size_t size, gfp_t flags)
    1266             : {
    1267             :         return kzalloc(size, flags);
    1268             : }
    1269             : 
    1270             : static inline void __percpu *
    1271             : bpf_map_alloc_percpu(const struct bpf_map *map, size_t size, size_t align,
    1272             :                      gfp_t flags)
    1273             : {
    1274             :         return __alloc_percpu_gfp(size, align, flags);
    1275             : }
    1276             : #endif
    1277             : 
    1278             : extern int sysctl_unprivileged_bpf_disabled;
    1279             : 
    1280             : static inline bool bpf_allow_ptr_leaks(void)
    1281             : {
    1282             :         return perfmon_capable();
    1283             : }
    1284             : 
    1285             : static inline bool bpf_allow_uninit_stack(void)
    1286             : {
    1287             :         return perfmon_capable();
    1288             : }
    1289             : 
    1290             : static inline bool bpf_allow_ptr_to_map_access(void)
    1291             : {
    1292             :         return perfmon_capable();
    1293             : }
    1294             : 
    1295             : static inline bool bpf_bypass_spec_v1(void)
    1296             : {
    1297             :         return perfmon_capable();
    1298             : }
    1299             : 
    1300             : static inline bool bpf_bypass_spec_v4(void)
    1301             : {
    1302             :         return perfmon_capable();
    1303             : }
    1304             : 
    1305             : int bpf_map_new_fd(struct bpf_map *map, int flags);
    1306             : int bpf_prog_new_fd(struct bpf_prog *prog);
    1307             : 
    1308             : void bpf_link_init(struct bpf_link *link, enum bpf_link_type type,
    1309             :                    const struct bpf_link_ops *ops, struct bpf_prog *prog);
    1310             : int bpf_link_prime(struct bpf_link *link, struct bpf_link_primer *primer);
    1311             : int bpf_link_settle(struct bpf_link_primer *primer);
    1312             : void bpf_link_cleanup(struct bpf_link_primer *primer);
    1313             : void bpf_link_inc(struct bpf_link *link);
    1314             : void bpf_link_put(struct bpf_link *link);
    1315             : int bpf_link_new_fd(struct bpf_link *link);
    1316             : struct file *bpf_link_new_file(struct bpf_link *link, int *reserved_fd);
    1317             : struct bpf_link *bpf_link_get_from_fd(u32 ufd);
    1318             : 
    1319             : int bpf_obj_pin_user(u32 ufd, const char __user *pathname);
    1320             : int bpf_obj_get_user(const char __user *pathname, int flags);
    1321             : 
    1322             : #define BPF_ITER_FUNC_PREFIX "bpf_iter_"
    1323             : #define DEFINE_BPF_ITER_FUNC(target, args...)                   \
    1324             :         extern int bpf_iter_ ## target(args);                   \
    1325             :         int __init bpf_iter_ ## target(args) { return 0; }
    1326             : 
    1327             : struct bpf_iter_aux_info {
    1328             :         struct bpf_map *map;
    1329             : };
    1330             : 
    1331             : typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *prog,
    1332             :                                         union bpf_iter_link_info *linfo,
    1333             :                                         struct bpf_iter_aux_info *aux);
    1334             : typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *aux);
    1335             : typedef void (*bpf_iter_show_fdinfo_t) (const struct bpf_iter_aux_info *aux,
    1336             :                                         struct seq_file *seq);
    1337             : typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *aux,
    1338             :                                          struct bpf_link_info *info);
    1339             : 
    1340             : enum bpf_iter_feature {
    1341             :         BPF_ITER_RESCHED        = BIT(0),
    1342             : };
    1343             : 
    1344             : #define BPF_ITER_CTX_ARG_MAX 2
    1345             : struct bpf_iter_reg {
    1346             :         const char *target;
    1347             :         bpf_iter_attach_target_t attach_target;
    1348             :         bpf_iter_detach_target_t detach_target;
    1349             :         bpf_iter_show_fdinfo_t show_fdinfo;
    1350             :         bpf_iter_fill_link_info_t fill_link_info;
    1351             :         u32 ctx_arg_info_size;
    1352             :         u32 feature;
    1353             :         struct bpf_ctx_arg_aux ctx_arg_info[BPF_ITER_CTX_ARG_MAX];
    1354             :         const struct bpf_iter_seq_info *seq_info;
    1355             : };
    1356             : 
    1357             : struct bpf_iter_meta {
    1358             :         __bpf_md_ptr(struct seq_file *, seq);
    1359             :         u64 session_id;
    1360             :         u64 seq_num;
    1361             : };
    1362             : 
    1363             : struct bpf_iter__bpf_map_elem {
    1364             :         __bpf_md_ptr(struct bpf_iter_meta *, meta);
    1365             :         __bpf_md_ptr(struct bpf_map *, map);
    1366             :         __bpf_md_ptr(void *, key);
    1367             :         __bpf_md_ptr(void *, value);
    1368             : };
    1369             : 
    1370             : int bpf_iter_reg_target(const struct bpf_iter_reg *reg_info);
    1371             : void bpf_iter_unreg_target(const struct bpf_iter_reg *reg_info);
    1372             : bool bpf_iter_prog_supported(struct bpf_prog *prog);
    1373             : int bpf_iter_link_attach(const union bpf_attr *attr, struct bpf_prog *prog);
    1374             : int bpf_iter_new_fd(struct bpf_link *link);
    1375             : bool bpf_link_is_iter(struct bpf_link *link);
    1376             : struct bpf_prog *bpf_iter_get_info(struct bpf_iter_meta *meta, bool in_stop);
    1377             : int bpf_iter_run_prog(struct bpf_prog *prog, void *ctx);
    1378             : void bpf_iter_map_show_fdinfo(const struct bpf_iter_aux_info *aux,
    1379             :                               struct seq_file *seq);
    1380             : int bpf_iter_map_fill_link_info(const struct bpf_iter_aux_info *aux,
    1381             :                                 struct bpf_link_info *info);
    1382             : 
    1383             : int bpf_percpu_hash_copy(struct bpf_map *map, void *key, void *value);
    1384             : int bpf_percpu_array_copy(struct bpf_map *map, void *key, void *value);
    1385             : int bpf_percpu_hash_update(struct bpf_map *map, void *key, void *value,
    1386             :                            u64 flags);
    1387             : int bpf_percpu_array_update(struct bpf_map *map, void *key, void *value,
    1388             :                             u64 flags);
    1389             : 
    1390             : int bpf_stackmap_copy(struct bpf_map *map, void *key, void *value);
    1391             : 
    1392             : int bpf_fd_array_map_update_elem(struct bpf_map *map, struct file *map_file,
    1393             :                                  void *key, void *value, u64 map_flags);
    1394             : int bpf_fd_array_map_lookup_elem(struct bpf_map *map, void *key, u32 *value);
    1395             : int bpf_fd_htab_map_update_elem(struct bpf_map *map, struct file *map_file,
    1396             :                                 void *key, void *value, u64 map_flags);
    1397             : int bpf_fd_htab_map_lookup_elem(struct bpf_map *map, void *key, u32 *value);
    1398             : 
    1399             : int bpf_get_file_flag(int flags);
    1400             : int bpf_check_uarg_tail_zero(void __user *uaddr, size_t expected_size,
    1401             :                              size_t actual_size);
    1402             : 
    1403             : /* memcpy that is used with 8-byte aligned pointers, power-of-8 size and
    1404             :  * forced to use 'long' read/writes to try to atomically copy long counters.
    1405             :  * Best-effort only.  No barriers here, since it _will_ race with concurrent
    1406             :  * updates from BPF programs. Called from bpf syscall and mostly used with
    1407             :  * size 8 or 16 bytes, so ask compiler to inline it.
    1408             :  */
    1409             : static inline void bpf_long_memcpy(void *dst, const void *src, u32 size)
    1410             : {
    1411             :         const long *lsrc = src;
    1412             :         long *ldst = dst;
    1413             : 
    1414             :         size /= sizeof(long);
    1415             :         while (size--)
    1416             :                 *ldst++ = *lsrc++;
    1417             : }
    1418             : 
    1419             : /* verify correctness of eBPF program */
    1420             : int bpf_check(struct bpf_prog **fp, union bpf_attr *attr,
    1421             :               union bpf_attr __user *uattr);
    1422             : 
    1423             : #ifndef CONFIG_BPF_JIT_ALWAYS_ON
    1424             : void bpf_patch_call_args(struct bpf_insn *insn, u32 stack_depth);
    1425             : #endif
    1426             : 
    1427             : struct btf *bpf_get_btf_vmlinux(void);
    1428             : 
    1429             : /* Map specifics */
    1430             : struct xdp_buff;
    1431             : struct sk_buff;
    1432             : 
    1433             : struct bpf_dtab_netdev *__dev_map_lookup_elem(struct bpf_map *map, u32 key);
    1434             : struct bpf_dtab_netdev *__dev_map_hash_lookup_elem(struct bpf_map *map, u32 key);
    1435             : void __dev_flush(void);
    1436             : int dev_xdp_enqueue(struct net_device *dev, struct xdp_buff *xdp,
    1437             :                     struct net_device *dev_rx);
    1438             : int dev_map_enqueue(struct bpf_dtab_netdev *dst, struct xdp_buff *xdp,
    1439             :                     struct net_device *dev_rx);
    1440             : int dev_map_generic_redirect(struct bpf_dtab_netdev *dst, struct sk_buff *skb,
    1441             :                              struct bpf_prog *xdp_prog);
    1442             : bool dev_map_can_have_prog(struct bpf_map *map);
    1443             : 
    1444             : struct bpf_cpu_map_entry *__cpu_map_lookup_elem(struct bpf_map *map, u32 key);
    1445             : void __cpu_map_flush(void);
    1446             : int cpu_map_enqueue(struct bpf_cpu_map_entry *rcpu, struct xdp_buff *xdp,
    1447             :                     struct net_device *dev_rx);
    1448             : bool cpu_map_prog_allowed(struct bpf_map *map);
    1449             : 
    1450             : /* Return map's numa specified by userspace */
    1451             : static inline int bpf_map_attr_numa_node(const union bpf_attr *attr)
    1452             : {
    1453             :         return (attr->map_flags & BPF_F_NUMA_NODE) ?
    1454             :                 attr->numa_node : NUMA_NO_NODE;
    1455             : }
    1456             : 
    1457             : struct bpf_prog *bpf_prog_get_type_path(const char *name, enum bpf_prog_type type);
    1458             : int array_map_alloc_check(union bpf_attr *attr);
    1459             : 
    1460             : int bpf_prog_test_run_xdp(struct bpf_prog *prog, const union bpf_attr *kattr,
    1461             :                           union bpf_attr __user *uattr);
    1462             : int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr,
    1463             :                           union bpf_attr __user *uattr);
    1464             : int bpf_prog_test_run_tracing(struct bpf_prog *prog,
    1465             :                               const union bpf_attr *kattr,
    1466             :                               union bpf_attr __user *uattr);
    1467             : int bpf_prog_test_run_flow_dissector(struct bpf_prog *prog,
    1468             :                                      const union bpf_attr *kattr,
    1469             :                                      union bpf_attr __user *uattr);
    1470             : int bpf_prog_test_run_raw_tp(struct bpf_prog *prog,
    1471             :                              const union bpf_attr *kattr,
    1472             :                              union bpf_attr __user *uattr);
    1473             : bool btf_ctx_access(int off, int size, enum bpf_access_type type,
    1474             :                     const struct bpf_prog *prog,
    1475             :                     struct bpf_insn_access_aux *info);
    1476             : int btf_struct_access(struct bpf_verifier_log *log, const struct btf *btf,
    1477             :                       const struct btf_type *t, int off, int size,
    1478             :                       enum bpf_access_type atype,
    1479             :                       u32 *next_btf_id);
    1480             : bool btf_struct_ids_match(struct bpf_verifier_log *log,
    1481             :                           const struct btf *btf, u32 id, int off,
    1482             :                           const struct btf *need_btf, u32 need_type_id);
    1483             : 
    1484             : int btf_distill_func_proto(struct bpf_verifier_log *log,
    1485             :                            struct btf *btf,
    1486             :                            const struct btf_type *func_proto,
    1487             :                            const char *func_name,
    1488             :                            struct btf_func_model *m);
    1489             : 
    1490             : struct bpf_reg_state;
    1491             : int btf_check_func_arg_match(struct bpf_verifier_env *env, int subprog,
    1492             :                              struct bpf_reg_state *regs);
    1493             : int btf_prepare_func_args(struct bpf_verifier_env *env, int subprog,
    1494             :                           struct bpf_reg_state *reg);
    1495             : int btf_check_type_match(struct bpf_verifier_log *log, const struct bpf_prog *prog,
    1496             :                          struct btf *btf, const struct btf_type *t);
    1497             : 
    1498             : struct bpf_prog *bpf_prog_by_id(u32 id);
    1499             : struct bpf_link *bpf_link_by_id(u32 id);
    1500             : 
    1501             : const struct bpf_func_proto *bpf_base_func_proto(enum bpf_func_id func_id);
    1502             : #else /* !CONFIG_BPF_SYSCALL */
    1503           0 : static inline struct bpf_prog *bpf_prog_get(u32 ufd)
    1504             : {
    1505           0 :         return ERR_PTR(-EOPNOTSUPP);
    1506             : }
    1507             : 
    1508           0 : static inline struct bpf_prog *bpf_prog_get_type_dev(u32 ufd,
    1509             :                                                      enum bpf_prog_type type,
    1510             :                                                      bool attach_drv)
    1511             : {
    1512           0 :         return ERR_PTR(-EOPNOTSUPP);
    1513             : }
    1514             : 
    1515             : static inline void bpf_prog_add(struct bpf_prog *prog, int i)
    1516             : {
    1517             : }
    1518             : 
    1519             : static inline void bpf_prog_sub(struct bpf_prog *prog, int i)
    1520             : {
    1521             : }
    1522             : 
    1523             : static inline void bpf_prog_put(struct bpf_prog *prog)
    1524             : {
    1525             : }
    1526             : 
    1527             : static inline void bpf_prog_inc(struct bpf_prog *prog)
    1528             : {
    1529             : }
    1530             : 
    1531             : static inline struct bpf_prog *__must_check
    1532             : bpf_prog_inc_not_zero(struct bpf_prog *prog)
    1533             : {
    1534             :         return ERR_PTR(-EOPNOTSUPP);
    1535             : }
    1536             : 
    1537           0 : static inline void bpf_link_init(struct bpf_link *link, enum bpf_link_type type,
    1538             :                                  const struct bpf_link_ops *ops,
    1539             :                                  struct bpf_prog *prog)
    1540             : {
    1541           0 : }
    1542             : 
    1543           0 : static inline int bpf_link_prime(struct bpf_link *link,
    1544             :                                  struct bpf_link_primer *primer)
    1545             : {
    1546           0 :         return -EOPNOTSUPP;
    1547             : }
    1548             : 
    1549             : static inline int bpf_link_settle(struct bpf_link_primer *primer)
    1550             : {
    1551             :         return -EOPNOTSUPP;
    1552             : }
    1553             : 
    1554             : static inline void bpf_link_cleanup(struct bpf_link_primer *primer)
    1555             : {
    1556             : }
    1557             : 
    1558             : static inline void bpf_link_inc(struct bpf_link *link)
    1559             : {
    1560             : }
    1561             : 
    1562             : static inline void bpf_link_put(struct bpf_link *link)
    1563             : {
    1564             : }
    1565             : 
    1566             : static inline int bpf_obj_get_user(const char __user *pathname, int flags)
    1567             : {
    1568             :         return -EOPNOTSUPP;
    1569             : }
    1570             : 
    1571             : static inline struct net_device  *__dev_map_lookup_elem(struct bpf_map *map,
    1572             :                                                        u32 key)
    1573             : {
    1574             :         return NULL;
    1575             : }
    1576             : 
    1577             : static inline struct net_device  *__dev_map_hash_lookup_elem(struct bpf_map *map,
    1578             :                                                              u32 key)
    1579             : {
    1580             :         return NULL;
    1581             : }
    1582           0 : static inline bool dev_map_can_have_prog(struct bpf_map *map)
    1583             : {
    1584           0 :         return false;
    1585             : }
    1586             : 
    1587           0 : static inline void __dev_flush(void)
    1588             : {
    1589           0 : }
    1590             : 
    1591             : struct xdp_buff;
    1592             : struct bpf_dtab_netdev;
    1593             : 
    1594             : static inline
    1595             : int dev_xdp_enqueue(struct net_device *dev, struct xdp_buff *xdp,
    1596             :                     struct net_device *dev_rx)
    1597             : {
    1598             :         return 0;
    1599             : }
    1600             : 
    1601             : static inline
    1602             : int dev_map_enqueue(struct bpf_dtab_netdev *dst, struct xdp_buff *xdp,
    1603             :                     struct net_device *dev_rx)
    1604             : {
    1605             :         return 0;
    1606             : }
    1607             : 
    1608             : struct sk_buff;
    1609             : 
    1610           0 : static inline int dev_map_generic_redirect(struct bpf_dtab_netdev *dst,
    1611             :                                            struct sk_buff *skb,
    1612             :                                            struct bpf_prog *xdp_prog)
    1613             : {
    1614           0 :         return 0;
    1615             : }
    1616             : 
    1617             : static inline
    1618             : struct bpf_cpu_map_entry *__cpu_map_lookup_elem(struct bpf_map *map, u32 key)
    1619             : {
    1620             :         return NULL;
    1621             : }
    1622             : 
    1623           0 : static inline void __cpu_map_flush(void)
    1624             : {
    1625           0 : }
    1626             : 
    1627             : static inline int cpu_map_enqueue(struct bpf_cpu_map_entry *rcpu,
    1628             :                                   struct xdp_buff *xdp,
    1629             :                                   struct net_device *dev_rx)
    1630             : {
    1631             :         return 0;
    1632             : }
    1633             : 
    1634           0 : static inline bool cpu_map_prog_allowed(struct bpf_map *map)
    1635             : {
    1636           0 :         return false;
    1637             : }
    1638             : 
    1639             : static inline struct bpf_prog *bpf_prog_get_type_path(const char *name,
    1640             :                                 enum bpf_prog_type type)
    1641             : {
    1642             :         return ERR_PTR(-EOPNOTSUPP);
    1643             : }
    1644             : 
    1645           0 : static inline int bpf_prog_test_run_xdp(struct bpf_prog *prog,
    1646             :                                         const union bpf_attr *kattr,
    1647             :                                         union bpf_attr __user *uattr)
    1648             : {
    1649           0 :         return -ENOTSUPP;
    1650             : }
    1651             : 
    1652           0 : static inline int bpf_prog_test_run_skb(struct bpf_prog *prog,
    1653             :                                         const union bpf_attr *kattr,
    1654             :                                         union bpf_attr __user *uattr)
    1655             : {
    1656           0 :         return -ENOTSUPP;
    1657             : }
    1658             : 
    1659             : static inline int bpf_prog_test_run_tracing(struct bpf_prog *prog,
    1660             :                                             const union bpf_attr *kattr,
    1661             :                                             union bpf_attr __user *uattr)
    1662             : {
    1663             :         return -ENOTSUPP;
    1664             : }
    1665             : 
    1666           0 : static inline int bpf_prog_test_run_flow_dissector(struct bpf_prog *prog,
    1667             :                                                    const union bpf_attr *kattr,
    1668             :                                                    union bpf_attr __user *uattr)
    1669             : {
    1670           0 :         return -ENOTSUPP;
    1671             : }
    1672             : 
    1673           0 : static inline void bpf_map_put(struct bpf_map *map)
    1674             : {
    1675           0 : }
    1676             : 
    1677             : static inline struct bpf_prog *bpf_prog_by_id(u32 id)
    1678             : {
    1679             :         return ERR_PTR(-ENOTSUPP);
    1680             : }
    1681             : 
    1682             : static inline const struct bpf_func_proto *
    1683           0 : bpf_base_func_proto(enum bpf_func_id func_id)
    1684             : {
    1685           0 :         return NULL;
    1686             : }
    1687             : #endif /* CONFIG_BPF_SYSCALL */
    1688             : 
    1689             : void __bpf_free_used_btfs(struct bpf_prog_aux *aux,
    1690             :                           struct btf_mod_pair *used_btfs, u32 len);
    1691             : 
    1692           0 : static inline struct bpf_prog *bpf_prog_get_type(u32 ufd,
    1693             :                                                  enum bpf_prog_type type)
    1694             : {
    1695           0 :         return bpf_prog_get_type_dev(ufd, type, false);
    1696             : }
    1697             : 
    1698             : void __bpf_free_used_maps(struct bpf_prog_aux *aux,
    1699             :                           struct bpf_map **used_maps, u32 len);
    1700             : 
    1701             : bool bpf_prog_get_ok(struct bpf_prog *, enum bpf_prog_type *, bool);
    1702             : 
    1703             : int bpf_prog_offload_compile(struct bpf_prog *prog);
    1704             : void bpf_prog_offload_destroy(struct bpf_prog *prog);
    1705             : int bpf_prog_offload_info_fill(struct bpf_prog_info *info,
    1706             :                                struct bpf_prog *prog);
    1707             : 
    1708             : int bpf_map_offload_info_fill(struct bpf_map_info *info, struct bpf_map *map);
    1709             : 
    1710             : int bpf_map_offload_lookup_elem(struct bpf_map *map, void *key, void *value);
    1711             : int bpf_map_offload_update_elem(struct bpf_map *map,
    1712             :                                 void *key, void *value, u64 flags);
    1713             : int bpf_map_offload_delete_elem(struct bpf_map *map, void *key);
    1714             : int bpf_map_offload_get_next_key(struct bpf_map *map,
    1715             :                                  void *key, void *next_key);
    1716             : 
    1717             : bool bpf_offload_prog_map_match(struct bpf_prog *prog, struct bpf_map *map);
    1718             : 
    1719             : struct bpf_offload_dev *
    1720             : bpf_offload_dev_create(const struct bpf_prog_offload_ops *ops, void *priv);
    1721             : void bpf_offload_dev_destroy(struct bpf_offload_dev *offdev);
    1722             : void *bpf_offload_dev_priv(struct bpf_offload_dev *offdev);
    1723             : int bpf_offload_dev_netdev_register(struct bpf_offload_dev *offdev,
    1724             :                                     struct net_device *netdev);
    1725             : void bpf_offload_dev_netdev_unregister(struct bpf_offload_dev *offdev,
    1726             :                                        struct net_device *netdev);
    1727             : bool bpf_offload_dev_match(struct bpf_prog *prog, struct net_device *netdev);
    1728             : 
    1729             : #if defined(CONFIG_NET) && defined(CONFIG_BPF_SYSCALL)
    1730             : int bpf_prog_offload_init(struct bpf_prog *prog, union bpf_attr *attr);
    1731             : 
    1732             : static inline bool bpf_prog_is_dev_bound(const struct bpf_prog_aux *aux)
    1733             : {
    1734             :         return aux->offload_requested;
    1735             : }
    1736             : 
    1737             : static inline bool bpf_map_is_dev_bound(struct bpf_map *map)
    1738             : {
    1739             :         return unlikely(map->ops == &bpf_map_offload_ops);
    1740             : }
    1741             : 
    1742             : struct bpf_map *bpf_map_offload_map_alloc(union bpf_attr *attr);
    1743             : void bpf_map_offload_map_free(struct bpf_map *map);
    1744             : #else
    1745             : static inline int bpf_prog_offload_init(struct bpf_prog *prog,
    1746             :                                         union bpf_attr *attr)
    1747             : {
    1748             :         return -EOPNOTSUPP;
    1749             : }
    1750             : 
    1751           7 : static inline bool bpf_prog_is_dev_bound(struct bpf_prog_aux *aux)
    1752             : {
    1753           7 :         return false;
    1754             : }
    1755             : 
    1756             : static inline bool bpf_map_is_dev_bound(struct bpf_map *map)
    1757             : {
    1758             :         return false;
    1759             : }
    1760             : 
    1761             : static inline struct bpf_map *bpf_map_offload_map_alloc(union bpf_attr *attr)
    1762             : {
    1763             :         return ERR_PTR(-EOPNOTSUPP);
    1764             : }
    1765             : 
    1766             : static inline void bpf_map_offload_map_free(struct bpf_map *map)
    1767             : {
    1768             : }
    1769             : #endif /* CONFIG_NET && CONFIG_BPF_SYSCALL */
    1770             : 
    1771             : #if defined(CONFIG_BPF_STREAM_PARSER)
    1772             : int sock_map_prog_update(struct bpf_map *map, struct bpf_prog *prog,
    1773             :                          struct bpf_prog *old, u32 which);
    1774             : int sock_map_get_from_fd(const union bpf_attr *attr, struct bpf_prog *prog);
    1775             : int sock_map_prog_detach(const union bpf_attr *attr, enum bpf_prog_type ptype);
    1776             : int sock_map_update_elem_sys(struct bpf_map *map, void *key, void *value, u64 flags);
    1777             : void sock_map_unhash(struct sock *sk);
    1778             : void sock_map_close(struct sock *sk, long timeout);
    1779             : #else
    1780             : static inline int sock_map_prog_update(struct bpf_map *map,
    1781             :                                        struct bpf_prog *prog,
    1782             :                                        struct bpf_prog *old, u32 which)
    1783             : {
    1784             :         return -EOPNOTSUPP;
    1785             : }
    1786             : 
    1787             : static inline int sock_map_get_from_fd(const union bpf_attr *attr,
    1788             :                                        struct bpf_prog *prog)
    1789             : {
    1790             :         return -EINVAL;
    1791             : }
    1792             : 
    1793             : static inline int sock_map_prog_detach(const union bpf_attr *attr,
    1794             :                                        enum bpf_prog_type ptype)
    1795             : {
    1796             :         return -EOPNOTSUPP;
    1797             : }
    1798             : 
    1799             : static inline int sock_map_update_elem_sys(struct bpf_map *map, void *key, void *value,
    1800             :                                            u64 flags)
    1801             : {
    1802             :         return -EOPNOTSUPP;
    1803             : }
    1804             : #endif /* CONFIG_BPF_STREAM_PARSER */
    1805             : 
    1806             : #if defined(CONFIG_INET) && defined(CONFIG_BPF_SYSCALL)
    1807             : void bpf_sk_reuseport_detach(struct sock *sk);
    1808             : int bpf_fd_reuseport_array_lookup_elem(struct bpf_map *map, void *key,
    1809             :                                        void *value);
    1810             : int bpf_fd_reuseport_array_update_elem(struct bpf_map *map, void *key,
    1811             :                                        void *value, u64 map_flags);
    1812             : #else
    1813           0 : static inline void bpf_sk_reuseport_detach(struct sock *sk)
    1814             : {
    1815           0 : }
    1816             : 
    1817             : #ifdef CONFIG_BPF_SYSCALL
    1818             : static inline int bpf_fd_reuseport_array_lookup_elem(struct bpf_map *map,
    1819             :                                                      void *key, void *value)
    1820             : {
    1821             :         return -EOPNOTSUPP;
    1822             : }
    1823             : 
    1824             : static inline int bpf_fd_reuseport_array_update_elem(struct bpf_map *map,
    1825             :                                                      void *key, void *value,
    1826             :                                                      u64 map_flags)
    1827             : {
    1828             :         return -EOPNOTSUPP;
    1829             : }
    1830             : #endif /* CONFIG_BPF_SYSCALL */
    1831             : #endif /* defined(CONFIG_INET) && defined(CONFIG_BPF_SYSCALL) */
    1832             : 
    1833             : /* verifier prototypes for helper functions called from eBPF programs */
    1834             : extern const struct bpf_func_proto bpf_map_lookup_elem_proto;
    1835             : extern const struct bpf_func_proto bpf_map_update_elem_proto;
    1836             : extern const struct bpf_func_proto bpf_map_delete_elem_proto;
    1837             : extern const struct bpf_func_proto bpf_map_push_elem_proto;
    1838             : extern const struct bpf_func_proto bpf_map_pop_elem_proto;
    1839             : extern const struct bpf_func_proto bpf_map_peek_elem_proto;
    1840             : 
    1841             : extern const struct bpf_func_proto bpf_get_prandom_u32_proto;
    1842             : extern const struct bpf_func_proto bpf_get_smp_processor_id_proto;
    1843             : extern const struct bpf_func_proto bpf_get_numa_node_id_proto;
    1844             : extern const struct bpf_func_proto bpf_tail_call_proto;
    1845             : extern const struct bpf_func_proto bpf_ktime_get_ns_proto;
    1846             : extern const struct bpf_func_proto bpf_ktime_get_boot_ns_proto;
    1847             : extern const struct bpf_func_proto bpf_get_current_pid_tgid_proto;
    1848             : extern const struct bpf_func_proto bpf_get_current_uid_gid_proto;
    1849             : extern const struct bpf_func_proto bpf_get_current_comm_proto;
    1850             : extern const struct bpf_func_proto bpf_get_stackid_proto;
    1851             : extern const struct bpf_func_proto bpf_get_stack_proto;
    1852             : extern const struct bpf_func_proto bpf_get_task_stack_proto;
    1853             : extern const struct bpf_func_proto bpf_get_stackid_proto_pe;
    1854             : extern const struct bpf_func_proto bpf_get_stack_proto_pe;
    1855             : extern const struct bpf_func_proto bpf_sock_map_update_proto;
    1856             : extern const struct bpf_func_proto bpf_sock_hash_update_proto;
    1857             : extern const struct bpf_func_proto bpf_get_current_cgroup_id_proto;
    1858             : extern const struct bpf_func_proto bpf_get_current_ancestor_cgroup_id_proto;
    1859             : extern const struct bpf_func_proto bpf_msg_redirect_hash_proto;
    1860             : extern const struct bpf_func_proto bpf_msg_redirect_map_proto;
    1861             : extern const struct bpf_func_proto bpf_sk_redirect_hash_proto;
    1862             : extern const struct bpf_func_proto bpf_sk_redirect_map_proto;
    1863             : extern const struct bpf_func_proto bpf_spin_lock_proto;
    1864             : extern const struct bpf_func_proto bpf_spin_unlock_proto;
    1865             : extern const struct bpf_func_proto bpf_get_local_storage_proto;
    1866             : extern const struct bpf_func_proto bpf_strtol_proto;
    1867             : extern const struct bpf_func_proto bpf_strtoul_proto;
    1868             : extern const struct bpf_func_proto bpf_tcp_sock_proto;
    1869             : extern const struct bpf_func_proto bpf_jiffies64_proto;
    1870             : extern const struct bpf_func_proto bpf_get_ns_current_pid_tgid_proto;
    1871             : extern const struct bpf_func_proto bpf_event_output_data_proto;
    1872             : extern const struct bpf_func_proto bpf_ringbuf_output_proto;
    1873             : extern const struct bpf_func_proto bpf_ringbuf_reserve_proto;
    1874             : extern const struct bpf_func_proto bpf_ringbuf_submit_proto;
    1875             : extern const struct bpf_func_proto bpf_ringbuf_discard_proto;
    1876             : extern const struct bpf_func_proto bpf_ringbuf_query_proto;
    1877             : extern const struct bpf_func_proto bpf_skc_to_tcp6_sock_proto;
    1878             : extern const struct bpf_func_proto bpf_skc_to_tcp_sock_proto;
    1879             : extern const struct bpf_func_proto bpf_skc_to_tcp_timewait_sock_proto;
    1880             : extern const struct bpf_func_proto bpf_skc_to_tcp_request_sock_proto;
    1881             : extern const struct bpf_func_proto bpf_skc_to_udp6_sock_proto;
    1882             : extern const struct bpf_func_proto bpf_copy_from_user_proto;
    1883             : extern const struct bpf_func_proto bpf_snprintf_btf_proto;
    1884             : extern const struct bpf_func_proto bpf_per_cpu_ptr_proto;
    1885             : extern const struct bpf_func_proto bpf_this_cpu_ptr_proto;
    1886             : extern const struct bpf_func_proto bpf_ktime_get_coarse_ns_proto;
    1887             : extern const struct bpf_func_proto bpf_sock_from_file_proto;
    1888             : extern const struct bpf_func_proto bpf_get_socket_ptr_cookie_proto;
    1889             : 
    1890             : const struct bpf_func_proto *bpf_tracing_func_proto(
    1891             :         enum bpf_func_id func_id, const struct bpf_prog *prog);
    1892             : 
    1893             : const struct bpf_func_proto *tracing_prog_func_proto(
    1894             :   enum bpf_func_id func_id, const struct bpf_prog *prog);
    1895             : 
    1896             : /* Shared helpers among cBPF and eBPF. */
    1897             : void bpf_user_rnd_init_once(void);
    1898             : u64 bpf_user_rnd_u32(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5);
    1899             : u64 bpf_get_raw_cpu_id(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5);
    1900             : 
    1901             : #if defined(CONFIG_NET)
    1902             : bool bpf_sock_common_is_valid_access(int off, int size,
    1903             :                                      enum bpf_access_type type,
    1904             :                                      struct bpf_insn_access_aux *info);
    1905             : bool bpf_sock_is_valid_access(int off, int size, enum bpf_access_type type,
    1906             :                               struct bpf_insn_access_aux *info);
    1907             : u32 bpf_sock_convert_ctx_access(enum bpf_access_type type,
    1908             :                                 const struct bpf_insn *si,
    1909             :                                 struct bpf_insn *insn_buf,
    1910             :                                 struct bpf_prog *prog,
    1911             :                                 u32 *target_size);
    1912             : #else
    1913             : static inline bool bpf_sock_common_is_valid_access(int off, int size,
    1914             :                                                    enum bpf_access_type type,
    1915             :                                                    struct bpf_insn_access_aux *info)
    1916             : {
    1917             :         return false;
    1918             : }
    1919             : static inline bool bpf_sock_is_valid_access(int off, int size,
    1920             :                                             enum bpf_access_type type,
    1921             :                                             struct bpf_insn_access_aux *info)
    1922             : {
    1923             :         return false;
    1924             : }
    1925             : static inline u32 bpf_sock_convert_ctx_access(enum bpf_access_type type,
    1926             :                                               const struct bpf_insn *si,
    1927             :                                               struct bpf_insn *insn_buf,
    1928             :                                               struct bpf_prog *prog,
    1929             :                                               u32 *target_size)
    1930             : {
    1931             :         return 0;
    1932             : }
    1933             : #endif
    1934             : 
    1935             : #ifdef CONFIG_INET
    1936             : struct sk_reuseport_kern {
    1937             :         struct sk_buff *skb;
    1938             :         struct sock *sk;
    1939             :         struct sock *selected_sk;
    1940             :         void *data_end;
    1941             :         u32 hash;
    1942             :         u32 reuseport_id;
    1943             :         bool bind_inany;
    1944             : };
    1945             : bool bpf_tcp_sock_is_valid_access(int off, int size, enum bpf_access_type type,
    1946             :                                   struct bpf_insn_access_aux *info);
    1947             : 
    1948             : u32 bpf_tcp_sock_convert_ctx_access(enum bpf_access_type type,
    1949             :                                     const struct bpf_insn *si,
    1950             :                                     struct bpf_insn *insn_buf,
    1951             :                                     struct bpf_prog *prog,
    1952             :                                     u32 *target_size);
    1953             : 
    1954             : bool bpf_xdp_sock_is_valid_access(int off, int size, enum bpf_access_type type,
    1955             :                                   struct bpf_insn_access_aux *info);
    1956             : 
    1957             : u32 bpf_xdp_sock_convert_ctx_access(enum bpf_access_type type,
    1958             :                                     const struct bpf_insn *si,
    1959             :                                     struct bpf_insn *insn_buf,
    1960             :                                     struct bpf_prog *prog,
    1961             :                                     u32 *target_size);
    1962             : #else
    1963             : static inline bool bpf_tcp_sock_is_valid_access(int off, int size,
    1964             :                                                 enum bpf_access_type type,
    1965             :                                                 struct bpf_insn_access_aux *info)
    1966             : {
    1967             :         return false;
    1968             : }
    1969             : 
    1970             : static inline u32 bpf_tcp_sock_convert_ctx_access(enum bpf_access_type type,
    1971             :                                                   const struct bpf_insn *si,
    1972             :                                                   struct bpf_insn *insn_buf,
    1973             :                                                   struct bpf_prog *prog,
    1974             :                                                   u32 *target_size)
    1975             : {
    1976             :         return 0;
    1977             : }
    1978             : static inline bool bpf_xdp_sock_is_valid_access(int off, int size,
    1979             :                                                 enum bpf_access_type type,
    1980             :                                                 struct bpf_insn_access_aux *info)
    1981             : {
    1982             :         return false;
    1983             : }
    1984             : 
    1985             : static inline u32 bpf_xdp_sock_convert_ctx_access(enum bpf_access_type type,
    1986             :                                                   const struct bpf_insn *si,
    1987             :                                                   struct bpf_insn *insn_buf,
    1988             :                                                   struct bpf_prog *prog,
    1989             :                                                   u32 *target_size)
    1990             : {
    1991             :         return 0;
    1992             : }
    1993             : #endif /* CONFIG_INET */
    1994             : 
    1995             : enum bpf_text_poke_type {
    1996             :         BPF_MOD_CALL,
    1997             :         BPF_MOD_JUMP,
    1998             : };
    1999             : 
    2000             : int bpf_arch_text_poke(void *ip, enum bpf_text_poke_type t,
    2001             :                        void *addr1, void *addr2);
    2002             : 
    2003             : struct btf_id_set;
    2004             : bool btf_id_set_contains(const struct btf_id_set *set, u32 id);
    2005             : 
    2006             : #endif /* _LINUX_BPF_H */

Generated by: LCOV version 1.14