• Home
  • Raw
  • Download

Lines Matching refs:attr

100 static struct bpf_map *find_and_alloc_map(union bpf_attr *attr)  in find_and_alloc_map()  argument
103 u32 type = attr->map_type; in find_and_alloc_map()
115 err = ops->map_alloc_check(attr); in find_and_alloc_map()
119 if (attr->map_ifindex) in find_and_alloc_map()
121 map = ops->map_alloc(attr); in find_and_alloc_map()
176 void bpf_map_init_from_attr(struct bpf_map *map, union bpf_attr *attr) in bpf_map_init_from_attr() argument
178 map->map_type = attr->map_type; in bpf_map_init_from_attr()
179 map->key_size = attr->key_size; in bpf_map_init_from_attr()
180 map->value_size = attr->value_size; in bpf_map_init_from_attr()
181 map->max_entries = attr->max_entries; in bpf_map_init_from_attr()
182 map->map_flags = bpf_map_flags_retain_permanent(attr->map_flags); in bpf_map_init_from_attr()
183 map->numa_node = bpf_map_attr_numa_node(attr); in bpf_map_init_from_attr()
464 memchr_inv((void *) &attr->CMD##_LAST_FIELD + \
465 sizeof(attr->CMD##_LAST_FIELD), 0, \
466 sizeof(*attr) - \
468 sizeof(attr->CMD##_LAST_FIELD)) != NULL
550 static int map_create(union bpf_attr *attr) in map_create() argument
552 int numa_node = bpf_map_attr_numa_node(attr); in map_create()
562 f_flags = bpf_get_file_flag(attr->map_flags); in map_create()
572 map = find_and_alloc_map(attr); in map_create()
576 err = bpf_obj_name_cpy(map->name, attr->map_name); in map_create()
583 if (attr->btf_key_type_id || attr->btf_value_type_id) { in map_create()
586 if (!attr->btf_value_type_id) { in map_create()
591 btf = btf_get_by_fd(attr->btf_fd); in map_create()
597 err = map_check_btf(map, btf, attr->btf_key_type_id, in map_create()
598 attr->btf_value_type_id); in map_create()
605 map->btf_key_type_id = attr->btf_key_type_id; in map_create()
606 map->btf_value_type_id = attr->btf_value_type_id; in map_create()
739 static int map_lookup_elem(union bpf_attr *attr) in map_lookup_elem() argument
741 void __user *ukey = u64_to_user_ptr(attr->key); in map_lookup_elem()
742 void __user *uvalue = u64_to_user_ptr(attr->value); in map_lookup_elem()
743 int ufd = attr->map_fd; in map_lookup_elem()
753 if (attr->flags & ~BPF_F_LOCK) in map_lookup_elem()
765 if ((attr->flags & BPF_F_LOCK) && in map_lookup_elem()
829 if (attr->flags & BPF_F_LOCK) in map_lookup_elem()
874 static int map_update_elem(union bpf_attr *attr) in map_update_elem() argument
876 void __user *ukey = u64_to_user_ptr(attr->key); in map_update_elem()
877 void __user *uvalue = u64_to_user_ptr(attr->value); in map_update_elem()
878 int ufd = attr->map_fd; in map_update_elem()
897 if ((attr->flags & BPF_F_LOCK) && in map_update_elem()
928 err = bpf_map_offload_update_elem(map, key, value, attr->flags); in map_update_elem()
933 err = map->ops->map_update_elem(map, key, value, attr->flags); in map_update_elem()
944 err = bpf_percpu_hash_update(map, key, value, attr->flags); in map_update_elem()
946 err = bpf_percpu_array_update(map, key, value, attr->flags); in map_update_elem()
949 attr->flags); in map_update_elem()
953 attr->flags); in map_update_elem()
958 attr->flags); in map_update_elem()
963 attr->flags); in map_update_elem()
966 err = map->ops->map_push_elem(map, value, attr->flags); in map_update_elem()
969 err = map->ops->map_update_elem(map, key, value, attr->flags); in map_update_elem()
987 static int map_delete_elem(union bpf_attr *attr) in map_delete_elem() argument
989 void __user *ukey = u64_to_user_ptr(attr->key); in map_delete_elem()
990 int ufd = attr->map_fd; in map_delete_elem()
1037 static int map_get_next_key(union bpf_attr *attr) in map_get_next_key() argument
1039 void __user *ukey = u64_to_user_ptr(attr->key); in map_get_next_key()
1040 void __user *unext_key = u64_to_user_ptr(attr->next_key); in map_get_next_key()
1041 int ufd = attr->map_fd; in map_get_next_key()
1103 static int map_lookup_and_delete_elem(union bpf_attr *attr) in map_lookup_and_delete_elem() argument
1105 void __user *ukey = u64_to_user_ptr(attr->key); in map_lookup_and_delete_elem()
1106 void __user *uvalue = u64_to_user_ptr(attr->value); in map_lookup_and_delete_elem()
1107 int ufd = attr->map_fd; in map_lookup_and_delete_elem()
1165 static int map_freeze(const union bpf_attr *attr) in map_freeze() argument
1167 int err = 0, ufd = attr->map_fd; in map_freeze()
1564 static void bpf_prog_load_fixup_attach_type(union bpf_attr *attr) in bpf_prog_load_fixup_attach_type() argument
1566 switch (attr->prog_type) { in bpf_prog_load_fixup_attach_type()
1571 if (!attr->expected_attach_type) in bpf_prog_load_fixup_attach_type()
1572 attr->expected_attach_type = in bpf_prog_load_fixup_attach_type()
1630 static int bpf_prog_load(union bpf_attr *attr, union bpf_attr __user *uattr) in bpf_prog_load() argument
1632 enum bpf_prog_type type = attr->prog_type; in bpf_prog_load()
1641 if (attr->prog_flags & ~(BPF_F_STRICT_ALIGNMENT | in bpf_prog_load()
1648 (attr->prog_flags & BPF_F_ANY_ALIGNMENT) && in bpf_prog_load()
1653 if (strncpy_from_user(license, u64_to_user_ptr(attr->license), in bpf_prog_load()
1661 if (attr->insn_cnt == 0 || in bpf_prog_load()
1662 attr->insn_cnt > (capable(CAP_SYS_ADMIN) ? BPF_COMPLEXITY_LIMIT_INSNS : BPF_MAXINSNS)) in bpf_prog_load()
1669 bpf_prog_load_fixup_attach_type(attr); in bpf_prog_load()
1670 if (bpf_prog_load_check_attach_type(type, attr->expected_attach_type)) in bpf_prog_load()
1674 prog = bpf_prog_alloc(bpf_prog_size(attr->insn_cnt), GFP_USER); in bpf_prog_load()
1678 prog->expected_attach_type = attr->expected_attach_type; in bpf_prog_load()
1680 prog->aux->offload_requested = !!attr->prog_ifindex; in bpf_prog_load()
1690 prog->len = attr->insn_cnt; in bpf_prog_load()
1693 if (copy_from_user(prog->insns, u64_to_user_ptr(attr->insns), in bpf_prog_load()
1704 err = bpf_prog_offload_init(prog, attr); in bpf_prog_load()
1715 err = bpf_obj_name_cpy(prog->aux->name, attr->prog_name); in bpf_prog_load()
1720 err = bpf_check(&prog, attr, uattr); in bpf_prog_load()
1772 static int bpf_obj_pin(const union bpf_attr *attr) in bpf_obj_pin() argument
1774 if (CHECK_ATTR(BPF_OBJ) || attr->file_flags != 0) in bpf_obj_pin()
1777 return bpf_obj_pin_user(attr->bpf_fd, u64_to_user_ptr(attr->pathname)); in bpf_obj_pin()
1780 static int bpf_obj_get(const union bpf_attr *attr) in bpf_obj_get() argument
1782 if (CHECK_ATTR(BPF_OBJ) || attr->bpf_fd != 0 || in bpf_obj_get()
1783 attr->file_flags & ~BPF_OBJ_FLAG_MASK) in bpf_obj_get()
1786 return bpf_obj_get_user(u64_to_user_ptr(attr->pathname), in bpf_obj_get()
1787 attr->file_flags); in bpf_obj_get()
1816 static int bpf_raw_tracepoint_open(const union bpf_attr *attr) in bpf_raw_tracepoint_open() argument
1824 if (strncpy_from_user(tp_name, u64_to_user_ptr(attr->raw_tracepoint.name), in bpf_raw_tracepoint_open()
1840 prog = bpf_prog_get(attr->raw_tracepoint.prog_fd); in bpf_raw_tracepoint_open()
1896 static int bpf_prog_attach(const union bpf_attr *attr) in bpf_prog_attach() argument
1908 if (attr->attach_flags & ~BPF_F_ATTACH_MASK) in bpf_prog_attach()
1911 switch (attr->attach_type) { in bpf_prog_attach()
1961 prog = bpf_prog_get_type(attr->attach_bpf_fd, ptype); in bpf_prog_attach()
1965 if (bpf_prog_attach_check_attach_type(prog, attr->attach_type)) { in bpf_prog_attach()
1973 ret = sock_map_get_from_fd(attr, prog); in bpf_prog_attach()
1976 ret = lirc_prog_attach(attr, prog); in bpf_prog_attach()
1979 ret = skb_flow_dissector_bpf_prog_attach(attr, prog); in bpf_prog_attach()
1982 ret = cgroup_bpf_prog_attach(attr, ptype, prog); in bpf_prog_attach()
1992 static int bpf_prog_detach(const union bpf_attr *attr) in bpf_prog_detach() argument
2002 switch (attr->attach_type) { in bpf_prog_detach()
2029 return sock_map_get_from_fd(attr, NULL); in bpf_prog_detach()
2032 return sock_map_get_from_fd(attr, NULL); in bpf_prog_detach()
2034 return lirc_prog_detach(attr); in bpf_prog_detach()
2036 return skb_flow_dissector_bpf_prog_detach(attr); in bpf_prog_detach()
2048 return cgroup_bpf_prog_detach(attr, ptype); in bpf_prog_detach()
2053 static int bpf_prog_query(const union bpf_attr *attr, in bpf_prog_query() argument
2060 if (attr->query.query_flags & ~BPF_F_QUERY_EFFECTIVE) in bpf_prog_query()
2063 switch (attr->query.attach_type) { in bpf_prog_query()
2084 return lirc_prog_query(attr, uattr); in bpf_prog_query()
2086 return skb_flow_dissector_prog_query(attr, uattr); in bpf_prog_query()
2091 return cgroup_bpf_prog_query(attr, uattr); in bpf_prog_query()
2096 static int bpf_prog_test_run(const union bpf_attr *attr, in bpf_prog_test_run() argument
2107 if ((attr->test.ctx_size_in && !attr->test.ctx_in) || in bpf_prog_test_run()
2108 (!attr->test.ctx_size_in && attr->test.ctx_in)) in bpf_prog_test_run()
2111 if ((attr->test.ctx_size_out && !attr->test.ctx_out) || in bpf_prog_test_run()
2112 (!attr->test.ctx_size_out && attr->test.ctx_out)) in bpf_prog_test_run()
2115 prog = bpf_prog_get(attr->test.prog_fd); in bpf_prog_test_run()
2120 ret = prog->aux->ops->test_run(prog, attr, uattr); in bpf_prog_test_run()
2128 static int bpf_obj_get_next_id(const union bpf_attr *attr, in bpf_obj_get_next_id() argument
2133 u32 next_id = attr->start_id; in bpf_obj_get_next_id()
2156 static int bpf_prog_get_fd_by_id(const union bpf_attr *attr) in bpf_prog_get_fd_by_id() argument
2159 u32 id = attr->prog_id; in bpf_prog_get_fd_by_id()
2188 static int bpf_map_get_fd_by_id(const union bpf_attr *attr) in bpf_map_get_fd_by_id() argument
2191 u32 id = attr->map_id; in bpf_map_get_fd_by_id()
2196 attr->open_flags & ~BPF_OBJ_FLAG_MASK) in bpf_map_get_fd_by_id()
2202 f_flags = bpf_get_file_flag(attr->open_flags); in bpf_map_get_fd_by_id()
2324 const union bpf_attr *attr, in bpf_prog_get_info_by_fd() argument
2327 struct bpf_prog_info __user *uinfo = u64_to_user_ptr(attr->info.info); in bpf_prog_get_info_by_fd()
2329 u32 info_len = attr->info.info_len; in bpf_prog_get_info_by_fd()
2599 const union bpf_attr *attr, in bpf_map_get_info_by_fd() argument
2602 struct bpf_map_info __user *uinfo = u64_to_user_ptr(attr->info.info); in bpf_map_get_info_by_fd()
2604 u32 info_len = attr->info.info_len; in bpf_map_get_info_by_fd()
2640 const union bpf_attr *attr, in bpf_btf_get_info_by_fd() argument
2643 struct bpf_btf_info __user *uinfo = u64_to_user_ptr(attr->info.info); in bpf_btf_get_info_by_fd()
2644 u32 info_len = attr->info.info_len; in bpf_btf_get_info_by_fd()
2651 return btf_get_info_by_fd(btf, attr, uattr); in bpf_btf_get_info_by_fd()
2656 static int bpf_obj_get_info_by_fd(const union bpf_attr *attr, in bpf_obj_get_info_by_fd() argument
2659 int ufd = attr->info.bpf_fd; in bpf_obj_get_info_by_fd()
2671 err = bpf_prog_get_info_by_fd(f.file->private_data, attr, in bpf_obj_get_info_by_fd()
2674 err = bpf_map_get_info_by_fd(f.file->private_data, attr, in bpf_obj_get_info_by_fd()
2677 err = bpf_btf_get_info_by_fd(f.file->private_data, attr, uattr); in bpf_obj_get_info_by_fd()
2687 static int bpf_btf_load(const union bpf_attr *attr) in bpf_btf_load() argument
2695 return btf_new_fd(attr); in bpf_btf_load()
2700 static int bpf_btf_get_fd_by_id(const union bpf_attr *attr) in bpf_btf_get_fd_by_id() argument
2708 return btf_get_fd_by_id(attr->btf_id); in bpf_btf_get_fd_by_id()
2711 static int bpf_task_fd_query_copy(const union bpf_attr *attr, in bpf_task_fd_query_copy() argument
2717 char __user *ubuf = u64_to_user_ptr(attr->task_fd_query.buf); in bpf_task_fd_query_copy()
2723 input_len = attr->task_fd_query.buf_len; in bpf_task_fd_query_copy()
2760 static int bpf_task_fd_query(const union bpf_attr *attr, in bpf_task_fd_query() argument
2763 pid_t pid = attr->task_fd_query.pid; in bpf_task_fd_query()
2764 u32 fd = attr->task_fd_query.fd; in bpf_task_fd_query()
2777 if (attr->task_fd_query.flags != 0) in bpf_task_fd_query()
2806 err = bpf_task_fd_query_copy(attr, uattr, in bpf_task_fd_query()
2823 err = bpf_task_fd_query_copy(attr, uattr, prog_id, in bpf_task_fd_query()
2839 union bpf_attr attr = {}; in SYSCALL_DEFINE3() local
2845 err = bpf_check_uarg_tail_zero(uattr, sizeof(attr), size); in SYSCALL_DEFINE3()
2848 size = min_t(u32, size, sizeof(attr)); in SYSCALL_DEFINE3()
2851 if (copy_from_user(&attr, uattr, size) != 0) in SYSCALL_DEFINE3()
2854 err = security_bpf(cmd, &attr, size); in SYSCALL_DEFINE3()
2860 err = map_create(&attr); in SYSCALL_DEFINE3()
2863 err = map_lookup_elem(&attr); in SYSCALL_DEFINE3()
2866 err = map_update_elem(&attr); in SYSCALL_DEFINE3()
2869 err = map_delete_elem(&attr); in SYSCALL_DEFINE3()
2872 err = map_get_next_key(&attr); in SYSCALL_DEFINE3()
2875 err = map_freeze(&attr); in SYSCALL_DEFINE3()
2878 err = bpf_prog_load(&attr, uattr); in SYSCALL_DEFINE3()
2881 err = bpf_obj_pin(&attr); in SYSCALL_DEFINE3()
2884 err = bpf_obj_get(&attr); in SYSCALL_DEFINE3()
2887 err = bpf_prog_attach(&attr); in SYSCALL_DEFINE3()
2890 err = bpf_prog_detach(&attr); in SYSCALL_DEFINE3()
2893 err = bpf_prog_query(&attr, uattr); in SYSCALL_DEFINE3()
2896 err = bpf_prog_test_run(&attr, uattr); in SYSCALL_DEFINE3()
2899 err = bpf_obj_get_next_id(&attr, uattr, in SYSCALL_DEFINE3()
2903 err = bpf_obj_get_next_id(&attr, uattr, in SYSCALL_DEFINE3()
2907 err = bpf_obj_get_next_id(&attr, uattr, in SYSCALL_DEFINE3()
2911 err = bpf_prog_get_fd_by_id(&attr); in SYSCALL_DEFINE3()
2914 err = bpf_map_get_fd_by_id(&attr); in SYSCALL_DEFINE3()
2917 err = bpf_obj_get_info_by_fd(&attr, uattr); in SYSCALL_DEFINE3()
2920 err = bpf_raw_tracepoint_open(&attr); in SYSCALL_DEFINE3()
2923 err = bpf_btf_load(&attr); in SYSCALL_DEFINE3()
2926 err = bpf_btf_get_fd_by_id(&attr); in SYSCALL_DEFINE3()
2929 err = bpf_task_fd_query(&attr, uattr); in SYSCALL_DEFINE3()
2932 err = map_lookup_and_delete_elem(&attr); in SYSCALL_DEFINE3()