mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 22:26:55 +00:00
bpf: enforce all maps having memory usage callback
We have implemented memory usage callback for all maps, and we enforce any newly added map having a callback as well. We check this callback at map creation time. If it doesn't have the callback, we will return EINVAL. Signed-off-by: Yafang Shao <laoar.shao@gmail.com> Link: https://lore.kernel.org/r/20230305124615.12358-19-laoar.shao@gmail.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
9629363cd0
commit
6b4a6ea2c6
1 changed files with 3 additions and 7 deletions
|
@ -129,6 +129,8 @@ static struct bpf_map *find_and_alloc_map(union bpf_attr *attr)
|
||||||
}
|
}
|
||||||
if (attr->map_ifindex)
|
if (attr->map_ifindex)
|
||||||
ops = &bpf_map_offload_ops;
|
ops = &bpf_map_offload_ops;
|
||||||
|
if (!ops->map_mem_usage)
|
||||||
|
return ERR_PTR(-EINVAL);
|
||||||
map = ops->map_alloc(attr);
|
map = ops->map_alloc(attr);
|
||||||
if (IS_ERR(map))
|
if (IS_ERR(map))
|
||||||
return map;
|
return map;
|
||||||
|
@ -775,13 +777,7 @@ static fmode_t map_get_sys_perms(struct bpf_map *map, struct fd f)
|
||||||
/* Show the memory usage of a bpf map */
|
/* Show the memory usage of a bpf map */
|
||||||
static u64 bpf_map_memory_usage(const struct bpf_map *map)
|
static u64 bpf_map_memory_usage(const struct bpf_map *map)
|
||||||
{
|
{
|
||||||
unsigned long size;
|
|
||||||
|
|
||||||
if (map->ops->map_mem_usage)
|
|
||||||
return map->ops->map_mem_usage(map);
|
return map->ops->map_mem_usage(map);
|
||||||
|
|
||||||
size = round_up(map->key_size + bpf_map_value_size(map), 8);
|
|
||||||
return round_up(map->max_entries * size, PAGE_SIZE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bpf_map_show_fdinfo(struct seq_file *m, struct file *filp)
|
static void bpf_map_show_fdinfo(struct seq_file *m, struct file *filp)
|
||||||
|
|
Loading…
Reference in a new issue