Lines Matching refs:type
385 static bool type_is_pkt_pointer(enum bpf_reg_type type) in type_is_pkt_pointer() argument
387 return type == PTR_TO_PACKET || in type_is_pkt_pointer()
388 type == PTR_TO_PACKET_META; in type_is_pkt_pointer()
391 static bool type_is_sk_pointer(enum bpf_reg_type type) in type_is_sk_pointer() argument
393 return type == PTR_TO_SOCKET || in type_is_sk_pointer()
394 type == PTR_TO_SOCK_COMMON || in type_is_sk_pointer()
395 type == PTR_TO_TCP_SOCK || in type_is_sk_pointer()
396 type == PTR_TO_XDP_SOCK; in type_is_sk_pointer()
399 static bool reg_type_not_null(enum bpf_reg_type type) in reg_type_not_null() argument
401 return type == PTR_TO_SOCKET || in reg_type_not_null()
402 type == PTR_TO_TCP_SOCK || in reg_type_not_null()
403 type == PTR_TO_MAP_VALUE || in reg_type_not_null()
404 type == PTR_TO_SOCK_COMMON; in reg_type_not_null()
407 static bool reg_type_may_be_null(enum bpf_reg_type type) in reg_type_may_be_null() argument
409 return type == PTR_TO_MAP_VALUE_OR_NULL || in reg_type_may_be_null()
410 type == PTR_TO_SOCKET_OR_NULL || in reg_type_may_be_null()
411 type == PTR_TO_SOCK_COMMON_OR_NULL || in reg_type_may_be_null()
412 type == PTR_TO_TCP_SOCK_OR_NULL || in reg_type_may_be_null()
413 type == PTR_TO_BTF_ID_OR_NULL || in reg_type_may_be_null()
414 type == PTR_TO_MEM_OR_NULL || in reg_type_may_be_null()
415 type == PTR_TO_RDONLY_BUF_OR_NULL || in reg_type_may_be_null()
416 type == PTR_TO_RDWR_BUF_OR_NULL; in reg_type_may_be_null()
421 return reg->type == PTR_TO_MAP_VALUE && in reg_may_point_to_spin_lock()
425 static bool reg_type_may_be_refcounted_or_null(enum bpf_reg_type type) in reg_type_may_be_refcounted_or_null() argument
427 return type == PTR_TO_SOCKET || in reg_type_may_be_refcounted_or_null()
428 type == PTR_TO_SOCKET_OR_NULL || in reg_type_may_be_refcounted_or_null()
429 type == PTR_TO_TCP_SOCK || in reg_type_may_be_refcounted_or_null()
430 type == PTR_TO_TCP_SOCK_OR_NULL || in reg_type_may_be_refcounted_or_null()
431 type == PTR_TO_MEM || in reg_type_may_be_refcounted_or_null()
432 type == PTR_TO_MEM_OR_NULL; in reg_type_may_be_refcounted_or_null()
435 static bool arg_type_may_be_refcounted(enum bpf_arg_type type) in arg_type_may_be_refcounted() argument
437 return type == ARG_PTR_TO_SOCK_COMMON; in arg_type_may_be_refcounted()
440 static bool arg_type_may_be_null(enum bpf_arg_type type) in arg_type_may_be_null() argument
442 return type == ARG_PTR_TO_MAP_VALUE_OR_NULL || in arg_type_may_be_null()
443 type == ARG_PTR_TO_MEM_OR_NULL || in arg_type_may_be_null()
444 type == ARG_PTR_TO_CTX_OR_NULL || in arg_type_may_be_null()
445 type == ARG_PTR_TO_SOCKET_OR_NULL || in arg_type_may_be_null()
446 type == ARG_PTR_TO_ALLOC_MEM_OR_NULL; in arg_type_may_be_null()
590 t = reg->type; in print_verifier_state()
685 t = reg->type; in print_verifier_state()
1048 memset(((u8 *)reg) + sizeof(reg->type), 0, in __mark_reg_known()
1049 offsetof(struct bpf_reg_state, var_off) - sizeof(reg->type)); in __mark_reg_known()
1073 reg->type = SCALAR_VALUE; in __mark_reg_const_zero()
1091 return type_is_pkt_pointer(reg->type); in reg_is_pkt_pointer()
1097 reg->type == PTR_TO_PACKET_END; in reg_is_pkt_pointer_any()
1108 return reg->type == which && in reg_is_init_pkt_pointer()
1359 reg->type = SCALAR_VALUE; in __mark_reg_unknown()
1383 reg->type = NOT_INIT; in __mark_reg_not_init()
1408 regs[regno].type = PTR_TO_BTF_ID; in mark_btf_ld_reg()
1427 regs[BPF_REG_FP].type = PTR_TO_STACK; in init_reg_state()
1584 reg_type_str[parent->type], in mark_reg_read()
1671 if (reg->type != SCALAR_VALUE) in is_reg64()
1752 if (reg->type == NOT_INIT) { in check_reg_arg()
2040 if (reg->type != SCALAR_VALUE) in mark_all_scalars_precise()
2048 if (reg->type != SCALAR_VALUE) in mark_all_scalars_precise()
2066 if (reg->type != SCALAR_VALUE) in mark_all_scalars_imprecise()
2074 if (reg->type != SCALAR_VALUE) in mark_all_scalars_imprecise()
2192 if (reg->type != SCALAR_VALUE) { in __mark_chain_precision()
2205 if (reg->type != SCALAR_VALUE) { in __mark_chain_precision()
2238 if (reg->type != SCALAR_VALUE) { in __mark_chain_precision()
2296 if (reg->type != SCALAR_VALUE) { in __mark_chain_precision()
2330 if (reg->type != SCALAR_VALUE) { in __mark_chain_precision()
2371 static bool is_spillable_regtype(enum bpf_reg_type type) in is_spillable_regtype() argument
2373 switch (type) { in is_spillable_regtype()
2408 return reg->type == SCALAR_VALUE && tnum_equals_const(reg->var_off, 0); in register_is_null()
2413 return reg->type == SCALAR_VALUE && tnum_is_const(reg->var_off); in register_is_const()
2427 return reg->type == SCALAR_VALUE && !__is_scalar_unbounded(reg); in register_is_bounded()
2436 return reg->type != SCALAR_VALUE; in __is_pointer_value()
2506 bool sanitize = reg && is_spillable_regtype(reg->type); in check_stack_write_fixed_off()
2509 u8 type = state->stack[spi].slot_type[i]; in check_stack_write_fixed_off() local
2511 if (type != STACK_MISC && type != STACK_ZERO) { in check_stack_write_fixed_off()
2543 fake_reg.type = SCALAR_VALUE; in check_stack_write_fixed_off()
2545 } else if (reg && is_spillable_regtype(reg->type)) { in check_stack_write_fixed_off()
2552 if (state != cur && reg->type == PTR_TO_STACK) { in check_stack_write_fixed_off()
2558 u8 type = STACK_MISC; in check_stack_write_fixed_off() local
2561 state->stack[spi].spilled_ptr.type = NOT_INIT; in check_stack_write_fixed_off()
2585 type = STACK_ZERO; in check_stack_write_fixed_off()
2591 type; in check_stack_write_fixed_off()
2673 state->stack[spi].spilled_ptr.type = NOT_INIT; in check_stack_write_var_off()
2773 u8 *stype, type; in check_stack_read_fixed_off() local
2785 if (reg->type != SCALAR_VALUE) { in check_stack_read_fixed_off()
2805 type = stype[(slot - i) % BPF_REG_SIZE]; in check_stack_read_fixed_off()
2806 if (type == STACK_SPILL) in check_stack_read_fixed_off()
2808 if (type == STACK_MISC) in check_stack_read_fixed_off()
2842 type = stype[(slot - i) % BPF_REG_SIZE]; in check_stack_read_fixed_off()
2843 if (type == STACK_MISC) in check_stack_read_fixed_off()
2845 if (type == STACK_ZERO) in check_stack_read_fixed_off()
2866 enum stack_access_src type,
2999 int off, int size, enum bpf_access_type type) in check_map_access_type() argument
3005 if (type == BPF_WRITE && !(cap & BPF_MAP_CAN_WRITE)) { in check_map_access_type()
3011 if (type == BPF_READ && !(cap & BPF_MAP_CAN_READ)) { in check_map_access_type()
3032 switch (reg->type) { in __check_mem_access()
3147 return prog->aux->dst_prog ? prog->aux->dst_prog->type : prog->type; in resolve_prog_type()
3296 switch (reg->type) { in check_sock_access()
3321 regno, reg_type_str[reg->type], off, size); in check_sock_access()
3335 return reg->type == PTR_TO_CTX; in is_ctx_reg()
3342 return type_is_sk_pointer(reg->type); in is_sk_reg()
3349 return type_is_pkt_pointer(reg->type); in is_pkt_reg()
3357 return reg->type == PTR_TO_FLOW_KEYS; in is_flow_key_reg()
3426 switch (reg->type) { in check_ptr_alignment()
3910 enum stack_access_src src, enum bpf_access_type type) in check_stack_access_within_bounds() argument
3922 else if (type == BPF_READ) in check_stack_access_within_bounds()
3941 err = check_stack_slot_within_bounds(min_off, state, type); in check_stack_access_within_bounds()
3987 if (reg->type == PTR_TO_MAP_VALUE) { in check_mem_access()
4012 regs[value_regno].type = SCALAR_VALUE; in check_mem_access()
4018 } else if (reg->type == PTR_TO_MEM) { in check_mem_access()
4028 } else if (reg->type == PTR_TO_CTX) { in check_mem_access()
4067 regs[value_regno].type = reg_type; in check_mem_access()
4070 } else if (reg->type == PTR_TO_STACK) { in check_mem_access()
4101 } else if (reg->type == PTR_TO_FLOW_KEYS) { in check_mem_access()
4112 } else if (type_is_sk_pointer(reg->type)) { in check_mem_access()
4115 regno, reg_type_str[reg->type]); in check_mem_access()
4121 } else if (reg->type == PTR_TO_TP_BUFFER) { in check_mem_access()
4125 } else if (reg->type == PTR_TO_BTF_ID) { in check_mem_access()
4128 } else if (reg->type == CONST_PTR_TO_MAP) { in check_mem_access()
4131 } else if (reg->type == PTR_TO_RDONLY_BUF) { in check_mem_access()
4134 regno, reg_type_str[reg->type]); in check_mem_access()
4142 } else if (reg->type == PTR_TO_RDWR_BUF) { in check_mem_access()
4150 reg_type_str[reg->type]); in check_mem_access()
4155 regs[value_regno].type == SCALAR_VALUE) { in check_mem_access()
4193 reg_type_str[reg_state(env, insn->dst_reg)->type]); in check_xadd()
4220 enum stack_access_src type, struct bpf_call_arg_meta *meta) in check_stack_range_initialized() argument
4225 char *err_extra = type == ACCESS_HELPER ? " indirect" : ""; in check_stack_range_initialized()
4237 if (type == ACCESS_HELPER) { in check_stack_range_initialized()
4248 type, bounds_check_type); in check_stack_range_initialized()
4307 state->stack[spi].spilled_ptr.type == PTR_TO_BTF_ID) in check_stack_range_initialized()
4311 (state->stack[spi].spilled_ptr.type == SCALAR_VALUE || in check_stack_range_initialized()
4350 switch (reg->type) { in check_helper_mem_access()
4390 reg_type_str[reg->type], in check_helper_mem_access()
4477 static bool arg_type_is_mem_ptr(enum bpf_arg_type type) in arg_type_is_mem_ptr() argument
4479 return type == ARG_PTR_TO_MEM || in arg_type_is_mem_ptr()
4480 type == ARG_PTR_TO_MEM_OR_NULL || in arg_type_is_mem_ptr()
4481 type == ARG_PTR_TO_UNINIT_MEM; in arg_type_is_mem_ptr()
4484 static bool arg_type_is_mem_size(enum bpf_arg_type type) in arg_type_is_mem_size() argument
4486 return type == ARG_CONST_SIZE || in arg_type_is_mem_size()
4487 type == ARG_CONST_SIZE_OR_ZERO; in arg_type_is_mem_size()
4490 static bool arg_type_is_alloc_size(enum bpf_arg_type type) in arg_type_is_alloc_size() argument
4492 return type == ARG_CONST_ALLOC_SIZE_OR_ZERO; in arg_type_is_alloc_size()
4495 static bool arg_type_is_int_ptr(enum bpf_arg_type type) in arg_type_is_int_ptr() argument
4497 return type == ARG_PTR_TO_INT || in arg_type_is_int_ptr()
4498 type == ARG_PTR_TO_LONG; in arg_type_is_int_ptr()
4501 static int int_ptr_type_to_size(enum bpf_arg_type type) in int_ptr_type_to_size() argument
4503 if (type == ARG_PTR_TO_INT) in int_ptr_type_to_size()
4505 else if (type == ARG_PTR_TO_LONG) in int_ptr_type_to_size()
4638 enum bpf_reg_type expected, type = reg->type; in check_reg_type() local
4653 if (type == expected) in check_reg_type()
4657 verbose(env, "R%d type=%s expected=", regno, reg_type_str[type]); in check_reg_type()
4664 if (type == PTR_TO_BTF_ID) { in check_reg_type()
4698 enum bpf_reg_type type = reg->type; in check_func_arg() local
4717 if (type_is_pkt_pointer(type) && in check_func_arg()
4741 if (type == PTR_TO_CTX) { in check_func_arg()
4886 enum bpf_prog_type type = resolve_prog_type(env->prog); in may_update_sockmap() local
4894 switch (type) { in may_update_sockmap()
5242 if (reg->type != PTR_TO_PACKET) in mark_pkt_end()
5405 if (r0->type == PTR_TO_STACK) { in prepare_func_exit()
5669 regs[BPF_REG_0].type = NOT_INIT; in check_helper_call()
5685 regs[BPF_REG_0].type = PTR_TO_MAP_VALUE; in check_helper_call()
5689 regs[BPF_REG_0].type = PTR_TO_MAP_VALUE_OR_NULL; in check_helper_call()
5693 regs[BPF_REG_0].type = PTR_TO_SOCKET_OR_NULL; in check_helper_call()
5696 regs[BPF_REG_0].type = PTR_TO_SOCK_COMMON_OR_NULL; in check_helper_call()
5699 regs[BPF_REG_0].type = PTR_TO_TCP_SOCK_OR_NULL; in check_helper_call()
5702 regs[BPF_REG_0].type = PTR_TO_MEM_OR_NULL; in check_helper_call()
5723 regs[BPF_REG_0].type = in check_helper_call()
5728 regs[BPF_REG_0].type = in check_helper_call()
5737 regs[BPF_REG_0].type = PTR_TO_BTF_ID_OR_NULL; in check_helper_call()
5751 if (reg_type_may_be_null(regs[BPF_REG_0].type)) in check_helper_call()
5844 enum bpf_reg_type type) in check_reg_sane_offset() argument
5852 reg_type_str[type], val); in check_reg_sane_offset()
5858 reg_type_str[type], reg->off); in check_reg_sane_offset()
5864 reg_type_str[type]); in check_reg_sane_offset()
5870 smin, reg_type_str[type]); in check_reg_sane_offset()
5895 switch (ptr_reg->type) { in retrieve_ptr_limit()
6180 switch (dst_reg->type) { in sanitize_check_bounds()
6247 switch (ptr_reg->type) { in adjust_ptr_min_max_vals()
6250 dst, reg_type_str[ptr_reg->type]); in adjust_ptr_min_max_vals()
6264 dst, reg_type_str[ptr_reg->type]); in adjust_ptr_min_max_vals()
6267 if (reg_type_may_be_null(ptr_reg->type)) in adjust_ptr_min_max_vals()
6275 dst_reg->type = ptr_reg->type; in adjust_ptr_min_max_vals()
6278 if (!check_reg_sane_offset(env, off_reg, ptr_reg->type) || in adjust_ptr_min_max_vals()
6279 !check_reg_sane_offset(env, ptr_reg, ptr_reg->type)) in adjust_ptr_min_max_vals()
6354 if (ptr_reg->type == PTR_TO_STACK) { in adjust_ptr_min_max_vals()
6417 if (!check_reg_sane_offset(env, dst_reg, ptr_reg->type)) in adjust_ptr_min_max_vals()
7176 if (dst_reg->type != SCALAR_VALUE) in adjust_reg_min_max_vals()
7185 if (src_reg->type != SCALAR_VALUE) { in adjust_reg_min_max_vals()
7186 if (dst_reg->type != SCALAR_VALUE) { in adjust_reg_min_max_vals()
7227 off_reg.type = SCALAR_VALUE; in adjust_reg_min_max_vals()
7321 if (src_reg->type == SCALAR_VALUE && !src_reg->id) in check_alu_op()
7337 } else if (src_reg->type == SCALAR_VALUE) { in check_alu_op()
7359 regs[insn->dst_reg].type = SCALAR_VALUE; in check_alu_op()
7425 enum bpf_reg_type type, in find_good_pkt_pointers() argument
7496 if (reg->type == type && reg->id == dst_reg->id) in find_good_pkt_pointers()
7659 if (!reg_type_not_null(reg->type)) in is_branch_taken()
7710 if (src_reg->type == PTR_TO_PACKET_END) { in is_pkt_ptr_branch_taken()
7712 } else if (dst_reg->type == PTR_TO_PACKET_END) { in is_pkt_ptr_branch_taken()
7960 if (reg_type_may_be_null(reg->type) && reg->id == id && in mark_ptr_or_null_reg()
7973 reg->type = SCALAR_VALUE; in mark_ptr_or_null_reg()
7974 } else if (reg->type == PTR_TO_MAP_VALUE_OR_NULL) { in mark_ptr_or_null_reg()
7978 reg->type = CONST_PTR_TO_MAP; in mark_ptr_or_null_reg()
7981 reg->type = PTR_TO_XDP_SOCK; in mark_ptr_or_null_reg()
7984 reg->type = PTR_TO_SOCKET; in mark_ptr_or_null_reg()
7986 reg->type = PTR_TO_MAP_VALUE; in mark_ptr_or_null_reg()
7988 } else if (reg->type == PTR_TO_SOCKET_OR_NULL) { in mark_ptr_or_null_reg()
7989 reg->type = PTR_TO_SOCKET; in mark_ptr_or_null_reg()
7990 } else if (reg->type == PTR_TO_SOCK_COMMON_OR_NULL) { in mark_ptr_or_null_reg()
7991 reg->type = PTR_TO_SOCK_COMMON; in mark_ptr_or_null_reg()
7992 } else if (reg->type == PTR_TO_TCP_SOCK_OR_NULL) { in mark_ptr_or_null_reg()
7993 reg->type = PTR_TO_TCP_SOCK; in mark_ptr_or_null_reg()
7994 } else if (reg->type == PTR_TO_BTF_ID_OR_NULL) { in mark_ptr_or_null_reg()
7995 reg->type = PTR_TO_BTF_ID; in mark_ptr_or_null_reg()
7996 } else if (reg->type == PTR_TO_MEM_OR_NULL) { in mark_ptr_or_null_reg()
7997 reg->type = PTR_TO_MEM; in mark_ptr_or_null_reg()
7998 } else if (reg->type == PTR_TO_RDONLY_BUF_OR_NULL) { in mark_ptr_or_null_reg()
7999 reg->type = PTR_TO_RDONLY_BUF; in mark_ptr_or_null_reg()
8000 } else if (reg->type == PTR_TO_RDWR_BUF_OR_NULL) { in mark_ptr_or_null_reg()
8001 reg->type = PTR_TO_RDWR_BUF; in mark_ptr_or_null_reg()
8060 if ((dst_reg->type == PTR_TO_PACKET && in try_match_pkt_pointers()
8061 src_reg->type == PTR_TO_PACKET_END) || in try_match_pkt_pointers()
8062 (dst_reg->type == PTR_TO_PACKET_META && in try_match_pkt_pointers()
8066 dst_reg->type, false); in try_match_pkt_pointers()
8068 } else if ((dst_reg->type == PTR_TO_PACKET_END && in try_match_pkt_pointers()
8069 src_reg->type == PTR_TO_PACKET) || in try_match_pkt_pointers()
8071 src_reg->type == PTR_TO_PACKET_META)) { in try_match_pkt_pointers()
8074 src_reg->type, true); in try_match_pkt_pointers()
8081 if ((dst_reg->type == PTR_TO_PACKET && in try_match_pkt_pointers()
8082 src_reg->type == PTR_TO_PACKET_END) || in try_match_pkt_pointers()
8083 (dst_reg->type == PTR_TO_PACKET_META && in try_match_pkt_pointers()
8087 dst_reg->type, true); in try_match_pkt_pointers()
8089 } else if ((dst_reg->type == PTR_TO_PACKET_END && in try_match_pkt_pointers()
8090 src_reg->type == PTR_TO_PACKET) || in try_match_pkt_pointers()
8092 src_reg->type == PTR_TO_PACKET_META)) { in try_match_pkt_pointers()
8095 src_reg->type, false); in try_match_pkt_pointers()
8102 if ((dst_reg->type == PTR_TO_PACKET && in try_match_pkt_pointers()
8103 src_reg->type == PTR_TO_PACKET_END) || in try_match_pkt_pointers()
8104 (dst_reg->type == PTR_TO_PACKET_META && in try_match_pkt_pointers()
8108 dst_reg->type, true); in try_match_pkt_pointers()
8110 } else if ((dst_reg->type == PTR_TO_PACKET_END && in try_match_pkt_pointers()
8111 src_reg->type == PTR_TO_PACKET) || in try_match_pkt_pointers()
8113 src_reg->type == PTR_TO_PACKET_META)) { in try_match_pkt_pointers()
8116 src_reg->type, false); in try_match_pkt_pointers()
8123 if ((dst_reg->type == PTR_TO_PACKET && in try_match_pkt_pointers()
8124 src_reg->type == PTR_TO_PACKET_END) || in try_match_pkt_pointers()
8125 (dst_reg->type == PTR_TO_PACKET_META && in try_match_pkt_pointers()
8129 dst_reg->type, false); in try_match_pkt_pointers()
8131 } else if ((dst_reg->type == PTR_TO_PACKET_END && in try_match_pkt_pointers()
8132 src_reg->type == PTR_TO_PACKET) || in try_match_pkt_pointers()
8134 src_reg->type == PTR_TO_PACKET_META)) { in try_match_pkt_pointers()
8137 src_reg->type, true); in try_match_pkt_pointers()
8157 if (reg->type == SCALAR_VALUE && reg->id == known_reg->id) in find_equal_scalars()
8214 } else if (src_reg->type == SCALAR_VALUE && in check_cond_jmp_op()
8220 } else if (src_reg->type == SCALAR_VALUE && in check_cond_jmp_op()
8285 if (dst_reg->type == SCALAR_VALUE && in check_cond_jmp_op()
8286 src_reg->type == SCALAR_VALUE) { in check_cond_jmp_op()
8316 } else if (dst_reg->type == SCALAR_VALUE) { in check_cond_jmp_op()
8322 if (dst_reg->type == SCALAR_VALUE && dst_reg->id && in check_cond_jmp_op()
8334 reg_type_may_be_null(dst_reg->type)) { in check_cond_jmp_op()
8380 dst_reg->type = SCALAR_VALUE; in check_ld_imm()
8388 dst_reg->type = aux->btf_var.reg_type; in check_ld_imm()
8389 switch (dst_reg->type) { in check_ld_imm()
8409 dst_reg->type = PTR_TO_MAP_VALUE; in check_ld_imm()
8414 dst_reg->type = CONST_PTR_TO_MAP; in check_ld_imm()
8423 static bool may_access_skb(enum bpf_prog_type type) in may_access_skb() argument
8425 switch (type) { in may_access_skb()
8494 if (regs[ctx_reg].type != PTR_TO_CTX) { in check_ld_abs()
8541 !prog->aux->attach_func_proto->type) in check_return_code()
8561 if (reg->type != SCALAR_VALUE) { in check_return_code()
8563 reg_type_str[reg->type]); in check_return_code()
8622 if (reg->type != SCALAR_VALUE) { in check_return_code()
8624 reg_type_str[reg->type]); in check_return_code()
8913 const struct btf_type *type, *func_proto, *ret_type; in check_btf_func() local
8999 type = btf_type_by_id(btf, krecord[i].type_id); in check_btf_func()
9000 if (!type || !btf_type_is_func(type)) { in check_btf_func()
9005 info_aux[i].linkage = BTF_INFO_VLEN(type->info); in check_btf_func()
9007 func_proto = btf_type_by_id(btf, type->type); in check_btf_func()
9011 ret_type = btf_type_skip_modifiers(btf, func_proto->type, NULL); in check_btf_func()
9358 if (rold->type == PTR_TO_STACK) in regsafe()
9367 if (rold->type == NOT_INIT) in regsafe()
9370 if (rcur->type == NOT_INIT) in regsafe()
9372 switch (rold->type) { in regsafe()
9376 if (rcur->type == SCALAR_VALUE) { in regsafe()
9412 if (rcur->type != PTR_TO_MAP_VALUE_OR_NULL) in regsafe()
9420 if (rcur->type != rold->type) in regsafe()
9706 if (state_reg->type != SCALAR_VALUE || in propagate_precision()
9721 if (state_reg->type != SCALAR_VALUE || in propagate_precision()
9966 static bool reg_type_mismatch_ok(enum bpf_reg_type type) in reg_type_mismatch_ok() argument
9968 switch (type) { in reg_type_mismatch_ok()
10112 src_reg_type = regs[insn->src_reg].type; in do_check()
10164 dst_reg_type = regs[insn->dst_reg].type; in do_check()
10196 reg_type_str[reg_state(env, insn->dst_reg)->type]); in do_check()
10336 u32 type, id = insn->imm; in check_pseudo_btf_id() local
10376 if (vsi->type == id) { in check_pseudo_btf_id()
10386 type = t->type; in check_pseudo_btf_id()
10387 t = btf_type_skip_modifiers(btf_vmlinux, type, NULL); in check_pseudo_btf_id()
10390 aux->btf_var.btf_id = type; in check_pseudo_btf_id()
10408 aux->btf_var.btf_id = type; in check_pseudo_btf_id()
10421 static bool is_tracing_prog_type(enum bpf_prog_type type) in is_tracing_prog_type() argument
10423 switch (type) { in is_tracing_prog_type()
11151 enum bpf_access_type type; in convert_ctx_accesses() local
11187 type = BPF_READ; in convert_ctx_accesses()
11197 type = BPF_WRITE; in convert_ctx_accesses()
11203 if (type == BPF_WRITE && in convert_ctx_accesses()
11241 if (type == BPF_READ) { in convert_ctx_accesses()
11268 if (type == BPF_WRITE) { in convert_ctx_accesses()
11284 cnt = convert_ctx_access(type, insn, insn_buf, env->prog, in convert_ctx_accesses()
11392 func[i]->type = prog->type; in jit_subprogs()
12016 if (subprog || env->prog->type == BPF_PROG_TYPE_EXT) { in do_check_common()
12021 if (regs[i].type == PTR_TO_CTX) in do_check_common()
12023 else if (regs[i].type == SCALAR_VALUE) in do_check_common()
12028 regs[BPF_REG_1].type = PTR_TO_CTX; in do_check_common()
12160 t = st_ops->type; in check_struct_ops_btf_id()
12170 func_proto = btf_type_resolve_func_ptr(btf_vmlinux, member->type, in check_struct_ops_btf_id()
12242 bool prog_extension = prog->type == BPF_PROG_TYPE_EXT; in bpf_check_attach_target()
12300 if (tgt_prog->type == prog->type) { in bpf_check_attach_target()
12308 if (tgt_prog->type == BPF_PROG_TYPE_TRACING && in bpf_check_attach_target()
12355 t = btf_type_by_id(btf, t->type); in bpf_check_attach_target()
12359 t = btf_type_by_id(btf, t->type); in bpf_check_attach_target()
12371 t = btf_type_by_id(btf, t->type); in bpf_check_attach_target()
12394 t = btf_type_by_id(btf, t->type); in bpf_check_attach_target()
12399 (!tgt_prog || prog->aux->saved_dst_prog_type != tgt_prog->type || in bpf_check_attach_target()
12427 switch (prog->type) { in bpf_check_attach_target()
12480 if (prog->aux->sleepable && prog->type != BPF_PROG_TYPE_TRACING && in check_attach_btf_id()
12481 prog->type != BPF_PROG_TYPE_LSM) { in check_attach_btf_id()
12486 if (prog->type == BPF_PROG_TYPE_STRUCT_OPS) in check_attach_btf_id()
12489 if (prog->type != BPF_PROG_TYPE_TRACING && in check_attach_btf_id()
12490 prog->type != BPF_PROG_TYPE_LSM && in check_attach_btf_id()
12491 prog->type != BPF_PROG_TYPE_EXT) in check_attach_btf_id()
12498 if (tgt_prog && prog->type == BPF_PROG_TYPE_EXT) { in check_attach_btf_id()
12503 env->ops = bpf_verifier_ops[tgt_prog->type]; in check_attach_btf_id()
12512 prog->aux->saved_dst_prog_type = tgt_prog->type; in check_attach_btf_id()
12525 if (prog->type == BPF_PROG_TYPE_LSM) { in check_attach_btf_id()
12581 env->ops = bpf_verifier_ops[env->prog->type]; in bpf_check()
12749 if (env->prog->type == BPF_PROG_TYPE_EXT) in bpf_check()