arm64: mte: add in-kernel tag fault handler
[linux-2.6-microblaze.git] / include / linux / bpf_verifier.h
index e83ef6f..e941fe1 100644 (file)
@@ -5,6 +5,7 @@
 #define _LINUX_BPF_VERIFIER_H 1
 
 #include <linux/bpf.h> /* for enum bpf_reg_type */
+#include <linux/btf.h> /* for struct btf and btf_id() */
 #include <linux/filter.h> /* for MAX_BPF_STACK */
 #include <linux/tnum.h>
 
@@ -43,24 +44,31 @@ enum bpf_reg_liveness {
 struct bpf_reg_state {
        /* Ordering of fields matters.  See states_equal() */
        enum bpf_reg_type type;
+       /* Fixed part of pointer offset, pointer types only */
+       s32 off;
        union {
                /* valid when type == PTR_TO_PACKET */
-               u16 range;
+               int range;
 
                /* valid when type == CONST_PTR_TO_MAP | PTR_TO_MAP_VALUE |
                 *   PTR_TO_MAP_VALUE_OR_NULL
                 */
                struct bpf_map *map_ptr;
 
-               u32 btf_id; /* for PTR_TO_BTF_ID */
+               /* for PTR_TO_BTF_ID */
+               struct {
+                       struct btf *btf;
+                       u32 btf_id;
+               };
 
                u32 mem_size; /* for PTR_TO_MEM | PTR_TO_MEM_OR_NULL */
 
                /* Max size from any of the above. */
-               unsigned long raw;
+               struct {
+                       unsigned long raw1;
+                       unsigned long raw2;
+               } raw;
        };
-       /* Fixed part of pointer offset, pointer types only */
-       s32 off;
        /* For PTR_TO_PACKET, used to find other pointers with the same variable
         * offset, so they can share range knowledge.
         * For PTR_TO_MAP_VALUE_OR_NULL this is used to share which map value we
@@ -311,7 +319,10 @@ struct bpf_insn_aux_data {
                struct {
                        enum bpf_reg_type reg_type;     /* type of pseudo_btf_id */
                        union {
-                               u32 btf_id;     /* btf_id for struct typed var */
+                               struct {
+                                       struct btf *btf;
+                                       u32 btf_id;     /* btf_id for struct typed var */
+                               };
                                u32 mem_size;   /* mem_size for non-struct typed var */
                        };
                } btf_var;
@@ -459,9 +470,12 @@ int check_ctx_reg(struct bpf_verifier_env *env,
 
 /* this lives here instead of in bpf.h because it needs to dereference tgt_prog */
 static inline u64 bpf_trampoline_compute_key(const struct bpf_prog *tgt_prog,
-                                            u32 btf_id)
+                                            struct btf *btf, u32 btf_id)
 {
-        return tgt_prog ? (((u64)tgt_prog->aux->id) << 32 | btf_id) : btf_id;
+       if (tgt_prog)
+               return ((u64)tgt_prog->aux->id << 32) | btf_id;
+       else
+               return ((u64)btf_obj_id(btf) << 32) | 0x80000000 | btf_id;
 }
 
 int bpf_check_attach_target(struct bpf_verifier_log *log,