Commit e4448ed8 authored by Al Viro's avatar Al Viro

bpf: don't open-code memdup_user()

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent a9bd8dfa
...@@ -322,14 +322,11 @@ static int map_lookup_elem(union bpf_attr *attr) ...@@ -322,14 +322,11 @@ static int map_lookup_elem(union bpf_attr *attr)
if (IS_ERR(map)) if (IS_ERR(map))
return PTR_ERR(map); return PTR_ERR(map);
err = -ENOMEM; key = memdup_user(ukey, map->key_size);
key = kmalloc(map->key_size, GFP_USER); if (IS_ERR(key)) {
if (!key) err = PTR_ERR(key);
goto err_put; goto err_put;
}
err = -EFAULT;
if (copy_from_user(key, ukey, map->key_size) != 0)
goto free_key;
if (map->map_type == BPF_MAP_TYPE_PERCPU_HASH || if (map->map_type == BPF_MAP_TYPE_PERCPU_HASH ||
map->map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH || map->map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH ||
...@@ -402,14 +399,11 @@ static int map_update_elem(union bpf_attr *attr) ...@@ -402,14 +399,11 @@ static int map_update_elem(union bpf_attr *attr)
if (IS_ERR(map)) if (IS_ERR(map))
return PTR_ERR(map); return PTR_ERR(map);
err = -ENOMEM; key = memdup_user(ukey, map->key_size);
key = kmalloc(map->key_size, GFP_USER); if (IS_ERR(key)) {
if (!key) err = PTR_ERR(key);
goto err_put; goto err_put;
}
err = -EFAULT;
if (copy_from_user(key, ukey, map->key_size) != 0)
goto free_key;
if (map->map_type == BPF_MAP_TYPE_PERCPU_HASH || if (map->map_type == BPF_MAP_TYPE_PERCPU_HASH ||
map->map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH || map->map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH ||
...@@ -488,14 +482,11 @@ static int map_delete_elem(union bpf_attr *attr) ...@@ -488,14 +482,11 @@ static int map_delete_elem(union bpf_attr *attr)
if (IS_ERR(map)) if (IS_ERR(map))
return PTR_ERR(map); return PTR_ERR(map);
err = -ENOMEM; key = memdup_user(ukey, map->key_size);
key = kmalloc(map->key_size, GFP_USER); if (IS_ERR(key)) {
if (!key) err = PTR_ERR(key);
goto err_put; goto err_put;
}
err = -EFAULT;
if (copy_from_user(key, ukey, map->key_size) != 0)
goto free_key;
preempt_disable(); preempt_disable();
__this_cpu_inc(bpf_prog_active); __this_cpu_inc(bpf_prog_active);
...@@ -507,7 +498,6 @@ static int map_delete_elem(union bpf_attr *attr) ...@@ -507,7 +498,6 @@ static int map_delete_elem(union bpf_attr *attr)
if (!err) if (!err)
trace_bpf_map_delete_elem(map, ufd, key); trace_bpf_map_delete_elem(map, ufd, key);
free_key:
kfree(key); kfree(key);
err_put: err_put:
fdput(f); fdput(f);
...@@ -536,14 +526,11 @@ static int map_get_next_key(union bpf_attr *attr) ...@@ -536,14 +526,11 @@ static int map_get_next_key(union bpf_attr *attr)
return PTR_ERR(map); return PTR_ERR(map);
if (ukey) { if (ukey) {
err = -ENOMEM; key = memdup_user(ukey, map->key_size);
key = kmalloc(map->key_size, GFP_USER); if (IS_ERR(key)) {
if (!key) err = PTR_ERR(key);
goto err_put; goto err_put;
}
err = -EFAULT;
if (copy_from_user(key, ukey, map->key_size) != 0)
goto free_key;
} else { } else {
key = NULL; key = NULL;
} }
......
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