Revert "bpf: Add map and need_defer parameters to .map_fd_put_ptr()"
This reverts commit eb6f68ec92
which is
commit 20c20bd11a0702ce4dc9300c3da58acf551d9725 upstream.
It breaks the Android kernel abi and can be brought back in the future
in an abi-safe way if it is really needed.
Bug: 161946584
Change-Id: I4611eed3677738ab29469733e2b4f6734ef3d605
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
parent
241e0d860f
commit
3298a76a41
@ -49,11 +49,7 @@ struct bpf_map_ops {
|
||||
/* funcs called by prog_array and perf_event_array map */
|
||||
void *(*map_fd_get_ptr)(struct bpf_map *map, struct file *map_file,
|
||||
int fd);
|
||||
/* If need_defer is true, the implementation should guarantee that
|
||||
* the to-be-put element is still alive before the bpf program, which
|
||||
* may manipulate it, exists.
|
||||
*/
|
||||
void (*map_fd_put_ptr)(struct bpf_map *map, void *ptr, bool need_defer);
|
||||
void (*map_fd_put_ptr)(void *ptr);
|
||||
u32 (*map_gen_lookup)(struct bpf_map *map, struct bpf_insn *insn_buf);
|
||||
u32 (*map_fd_sys_lookup_elem)(void *ptr);
|
||||
void (*map_seq_show_elem)(struct bpf_map *map, void *key,
|
||||
|
@ -542,7 +542,7 @@ int bpf_fd_array_map_update_elem(struct bpf_map *map, struct file *map_file,
|
||||
|
||||
old_ptr = xchg(array->ptrs + index, new_ptr);
|
||||
if (old_ptr)
|
||||
map->ops->map_fd_put_ptr(map, old_ptr, true);
|
||||
map->ops->map_fd_put_ptr(old_ptr);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -558,7 +558,7 @@ static int fd_array_map_delete_elem(struct bpf_map *map, void *key)
|
||||
|
||||
old_ptr = xchg(array->ptrs + index, NULL);
|
||||
if (old_ptr) {
|
||||
map->ops->map_fd_put_ptr(map, old_ptr, true);
|
||||
map->ops->map_fd_put_ptr(old_ptr);
|
||||
return 0;
|
||||
} else {
|
||||
return -ENOENT;
|
||||
@ -582,9 +582,8 @@ static void *prog_fd_array_get_ptr(struct bpf_map *map,
|
||||
return prog;
|
||||
}
|
||||
|
||||
static void prog_fd_array_put_ptr(struct bpf_map *map, void *ptr, bool need_defer)
|
||||
static void prog_fd_array_put_ptr(void *ptr)
|
||||
{
|
||||
/* bpf_prog is freed after one RCU or tasks trace grace period */
|
||||
bpf_prog_put(ptr);
|
||||
}
|
||||
|
||||
@ -695,9 +694,8 @@ err_out:
|
||||
return ee;
|
||||
}
|
||||
|
||||
static void perf_event_fd_array_put_ptr(struct bpf_map *map, void *ptr, bool need_defer)
|
||||
static void perf_event_fd_array_put_ptr(void *ptr)
|
||||
{
|
||||
/* bpf_perf_event is freed after one RCU grace period */
|
||||
bpf_event_entry_free_rcu(ptr);
|
||||
}
|
||||
|
||||
@ -738,7 +736,7 @@ static void *cgroup_fd_array_get_ptr(struct bpf_map *map,
|
||||
return cgroup_get_from_fd(fd);
|
||||
}
|
||||
|
||||
static void cgroup_fd_array_put_ptr(struct bpf_map *map, void *ptr, bool need_defer)
|
||||
static void cgroup_fd_array_put_ptr(void *ptr)
|
||||
{
|
||||
/* cgroup_put free cgrp after a rcu grace period */
|
||||
cgroup_put(ptr);
|
||||
|
@ -674,7 +674,7 @@ static void htab_put_fd_value(struct bpf_htab *htab, struct htab_elem *l)
|
||||
|
||||
if (map->ops->map_fd_put_ptr) {
|
||||
ptr = fd_htab_map_get_ptr(map, l);
|
||||
map->ops->map_fd_put_ptr(map, ptr, true);
|
||||
map->ops->map_fd_put_ptr(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1426,7 +1426,7 @@ static void fd_htab_map_free(struct bpf_map *map)
|
||||
hlist_nulls_for_each_entry_safe(l, n, head, hash_node) {
|
||||
void *ptr = fd_htab_map_get_ptr(map, l);
|
||||
|
||||
map->ops->map_fd_put_ptr(map, ptr, false);
|
||||
map->ops->map_fd_put_ptr(ptr);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1467,7 +1467,7 @@ int bpf_fd_htab_map_update_elem(struct bpf_map *map, struct file *map_file,
|
||||
|
||||
ret = htab_map_update_elem(map, key, &ptr, map_flags);
|
||||
if (ret)
|
||||
map->ops->map_fd_put_ptr(map, ptr, false);
|
||||
map->ops->map_fd_put_ptr(ptr);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -106,7 +106,7 @@ void *bpf_map_fd_get_ptr(struct bpf_map *map,
|
||||
return inner_map;
|
||||
}
|
||||
|
||||
void bpf_map_fd_put_ptr(struct bpf_map *map, void *ptr, bool need_defer)
|
||||
void bpf_map_fd_put_ptr(void *ptr)
|
||||
{
|
||||
/* ptr->ops->map_free() has to go through one
|
||||
* rcu grace period by itself.
|
||||
|
@ -15,7 +15,7 @@ bool bpf_map_meta_equal(const struct bpf_map *meta0,
|
||||
const struct bpf_map *meta1);
|
||||
void *bpf_map_fd_get_ptr(struct bpf_map *map, struct file *map_file,
|
||||
int ufd);
|
||||
void bpf_map_fd_put_ptr(struct bpf_map *map, void *ptr, bool need_defer);
|
||||
void bpf_map_fd_put_ptr(void *ptr);
|
||||
u32 bpf_map_fd_sys_lookup_elem(void *ptr);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user