bpf_verifier_opsRegular
4.4: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id);
bool (*is_valid_access)(int, int, enum bpf_access_type);
u32 (*convert_ctx_access)(enum bpf_access_type, int, int, int, struct bpf_insn *, struct bpf_prog *);
};
4.8: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id);
bool (*is_valid_access)(int, int, enum bpf_access_type, enum bpf_reg_type *);
u32 (*convert_ctx_access)(enum bpf_access_type, int, int, int, struct bpf_insn *, struct bpf_prog *);
};
4.10: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id);
bool (*is_valid_access)(int, int, enum bpf_access_type, enum bpf_reg_type *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
u32 (*convert_ctx_access)(enum bpf_access_type, int, int, int, struct bpf_insn *, struct bpf_prog *);
};
4.13: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id);
bool (*is_valid_access)(int, int, enum bpf_access_type, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *);
};
4.15: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id);
bool (*is_valid_access)(int, int, enum bpf_access_type, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
4.18: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
5.0: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
5.3: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
5.4: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
5.8: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf_type *, int, int, enum bpf_access_type, u32 *);
};
5.11: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *);
};
5.13: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *);
bool (*check_kfunc_call)(u32);
};
5.15: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *);
bool (*check_kfunc_call)(u32);
};
5.19: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *);
};
6.2: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
int (*btf_struct_access)(struct bpf_verifier_log *, const struct bpf_reg_state *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *);
};
6.5: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
int (*btf_struct_access)(struct bpf_verifier_log *, const struct bpf_reg_state *, int, int);
};
6.8: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
int (*btf_struct_access)(struct bpf_verifier_log *, const struct bpf_reg_state *, int, int);
};
arm64: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
armhf: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
ppc64el: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
riscv64: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
aws: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
azure: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
gcp: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
lowlatency: ✅struct bpf_verifier_ops {
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *);
bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *);
int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *);
int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *);
u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *);
};
Regular
4.4 and 4.8 ⚠️bool (*is_valid_access)(int, int, enum bpf_access_type) ➡️ bool (*is_valid_access)(int, int, enum bpf_access_type, enum bpf_reg_type *)
4.8 and 4.10 ⚠️int (*gen_prologue)(struct bpf_insn *, bool, const struct bpf_prog *)
4.10 and 4.13 ⚠️int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *)
bool (*is_valid_access)(int, int, enum bpf_access_type, enum bpf_reg_type *) ➡️ bool (*is_valid_access)(int, int, enum bpf_access_type, struct bpf_insn_access_aux *)
u32 (*convert_ctx_access)(enum bpf_access_type, int, int, int, struct bpf_insn *, struct bpf_prog *) ➡️ u32 (*convert_ctx_access)(enum bpf_access_type, const struct bpf_insn *, struct bpf_insn *, struct bpf_prog *, u32 *)
4.13 and 4.15 ⚠️int (*test_run)(struct bpf_prog *, const union bpf_attr *, union bpf_attr *)
4.15 and 4.18 ⚠️int (*gen_ld_abs)(const struct bpf_insn *, struct bpf_insn *)
const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id) ➡️ const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id, const struct bpf_prog *)
bool (*is_valid_access)(int, int, enum bpf_access_type, struct bpf_insn_access_aux *) ➡️ bool (*is_valid_access)(int, int, enum bpf_access_type, const struct bpf_prog *, struct bpf_insn_access_aux *)
4.18 and 5.0 ✅
5.0 and 5.3 ✅
5.3 and 5.4 ✅
5.4 and 5.8 ⚠️int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf_type *, int, int, enum bpf_access_type, u32 *)
5.8 and 5.11 ⚠️int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf_type *, int, int, enum bpf_access_type, u32 *) ➡️ int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *)
5.11 and 5.13 ⚠️bool (*check_kfunc_call)(u32)
5.13 and 5.15 ✅
5.15 and 5.19 ⚠️bool (*check_kfunc_call)(u32)
int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *) ➡️ int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *)
5.19 and 6.2 ⚠️int (*btf_struct_access)(struct bpf_verifier_log *, const struct btf *, const struct btf_type *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *) ➡️ int (*btf_struct_access)(struct bpf_verifier_log *, const struct bpf_reg_state *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *)
6.2 and 6.5 ⚠️int (*btf_struct_access)(struct bpf_verifier_log *, const struct bpf_reg_state *, int, int, enum bpf_access_type, u32 *, enum bpf_type_flag *) ➡️ int (*btf_struct_access)(struct bpf_verifier_log *, const struct bpf_reg_state *, int, int)
6.5 and 6.8 ✅
amd64 and arm64 ✅
amd64 and armhf ✅
amd64 and ppc64el ✅
amd64 and riscv64 ✅
generic and aws ✅
generic and azure ✅
generic and gcp ✅
generic and lowlatency ✅