Commit b88df697 authored by Benjamin Tissoires's avatar Benjamin Tissoires Committed by Alexei Starovoitov

bpf: prepare for more bpf syscall to be used from kernel and user space.

Add BPF_MAP_GET_FD_BY_ID and BPF_MAP_DELETE_PROG.

Only BPF_MAP_GET_FD_BY_ID needs to be amended to be able
to access the bpf pointer either from the userspace or the kernel.
Acked-by: default avatarYonghong Song <yhs@fb.com>
Signed-off-by: default avatarBenjamin Tissoires <benjamin.tissoires@redhat.com>
Link: https://lore.kernel.org/r/20220824134055.1328882-7-benjamin.tissoires@redhat.comSigned-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
parent d4ffb6f3
...@@ -1437,9 +1437,9 @@ static int map_update_elem(union bpf_attr *attr, bpfptr_t uattr) ...@@ -1437,9 +1437,9 @@ static int map_update_elem(union bpf_attr *attr, bpfptr_t uattr)
#define BPF_MAP_DELETE_ELEM_LAST_FIELD key #define BPF_MAP_DELETE_ELEM_LAST_FIELD key
static int map_delete_elem(union bpf_attr *attr) static int map_delete_elem(union bpf_attr *attr, bpfptr_t uattr)
{ {
void __user *ukey = u64_to_user_ptr(attr->key); bpfptr_t ukey = make_bpfptr(attr->key, uattr.is_kernel);
int ufd = attr->map_fd; int ufd = attr->map_fd;
struct bpf_map *map; struct bpf_map *map;
struct fd f; struct fd f;
...@@ -1459,7 +1459,7 @@ static int map_delete_elem(union bpf_attr *attr) ...@@ -1459,7 +1459,7 @@ static int map_delete_elem(union bpf_attr *attr)
goto err_put; goto err_put;
} }
key = __bpf_copy_key(ukey, map->key_size); key = ___bpf_copy_key(ukey, map->key_size);
if (IS_ERR(key)) { if (IS_ERR(key)) {
err = PTR_ERR(key); err = PTR_ERR(key);
goto err_put; goto err_put;
...@@ -4941,7 +4941,7 @@ static int __sys_bpf(int cmd, bpfptr_t uattr, unsigned int size) ...@@ -4941,7 +4941,7 @@ static int __sys_bpf(int cmd, bpfptr_t uattr, unsigned int size)
err = map_update_elem(&attr, uattr); err = map_update_elem(&attr, uattr);
break; break;
case BPF_MAP_DELETE_ELEM: case BPF_MAP_DELETE_ELEM:
err = map_delete_elem(&attr); err = map_delete_elem(&attr, uattr);
break; break;
case BPF_MAP_GET_NEXT_KEY: case BPF_MAP_GET_NEXT_KEY:
err = map_get_next_key(&attr); err = map_get_next_key(&attr);
...@@ -5073,8 +5073,10 @@ BPF_CALL_3(bpf_sys_bpf, int, cmd, union bpf_attr *, attr, u32, attr_size) ...@@ -5073,8 +5073,10 @@ BPF_CALL_3(bpf_sys_bpf, int, cmd, union bpf_attr *, attr, u32, attr_size)
{ {
switch (cmd) { switch (cmd) {
case BPF_MAP_CREATE: case BPF_MAP_CREATE:
case BPF_MAP_DELETE_ELEM:
case BPF_MAP_UPDATE_ELEM: case BPF_MAP_UPDATE_ELEM:
case BPF_MAP_FREEZE: case BPF_MAP_FREEZE:
case BPF_MAP_GET_FD_BY_ID:
case BPF_PROG_LOAD: case BPF_PROG_LOAD:
case BPF_BTF_LOAD: case BPF_BTF_LOAD:
case BPF_LINK_CREATE: case BPF_LINK_CREATE:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment