Loading kernel/bpf/syscall.c +16 −29 Original line number Diff line number Diff line Loading @@ -322,14 +322,11 @@ static int map_lookup_elem(union bpf_attr *attr) if (IS_ERR(map)) return PTR_ERR(map); err = -ENOMEM; key = kmalloc(map->key_size, GFP_USER); if (!key) key = memdup_user(ukey, map->key_size); if (IS_ERR(key)) { err = PTR_ERR(key); 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 || map->map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH || Loading Loading @@ -402,14 +399,11 @@ static int map_update_elem(union bpf_attr *attr) if (IS_ERR(map)) return PTR_ERR(map); err = -ENOMEM; key = kmalloc(map->key_size, GFP_USER); if (!key) key = memdup_user(ukey, map->key_size); if (IS_ERR(key)) { err = PTR_ERR(key); 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 || map->map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH || Loading Loading @@ -488,14 +482,11 @@ static int map_delete_elem(union bpf_attr *attr) if (IS_ERR(map)) return PTR_ERR(map); err = -ENOMEM; key = kmalloc(map->key_size, GFP_USER); if (!key) key = memdup_user(ukey, map->key_size); if (IS_ERR(key)) { err = PTR_ERR(key); goto err_put; err = -EFAULT; if (copy_from_user(key, ukey, map->key_size) != 0) goto free_key; } preempt_disable(); __this_cpu_inc(bpf_prog_active); Loading @@ -507,7 +498,6 @@ static int map_delete_elem(union bpf_attr *attr) if (!err) trace_bpf_map_delete_elem(map, ufd, key); free_key: kfree(key); err_put: fdput(f); Loading Loading @@ -536,14 +526,11 @@ static int map_get_next_key(union bpf_attr *attr) return PTR_ERR(map); if (ukey) { err = -ENOMEM; key = kmalloc(map->key_size, GFP_USER); if (!key) key = memdup_user(ukey, map->key_size); if (IS_ERR(key)) { err = PTR_ERR(key); goto err_put; err = -EFAULT; if (copy_from_user(key, ukey, map->key_size) != 0) goto free_key; } } else { key = NULL; } Loading Loading
kernel/bpf/syscall.c +16 −29 Original line number Diff line number Diff line Loading @@ -322,14 +322,11 @@ static int map_lookup_elem(union bpf_attr *attr) if (IS_ERR(map)) return PTR_ERR(map); err = -ENOMEM; key = kmalloc(map->key_size, GFP_USER); if (!key) key = memdup_user(ukey, map->key_size); if (IS_ERR(key)) { err = PTR_ERR(key); 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 || map->map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH || Loading Loading @@ -402,14 +399,11 @@ static int map_update_elem(union bpf_attr *attr) if (IS_ERR(map)) return PTR_ERR(map); err = -ENOMEM; key = kmalloc(map->key_size, GFP_USER); if (!key) key = memdup_user(ukey, map->key_size); if (IS_ERR(key)) { err = PTR_ERR(key); 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 || map->map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH || Loading Loading @@ -488,14 +482,11 @@ static int map_delete_elem(union bpf_attr *attr) if (IS_ERR(map)) return PTR_ERR(map); err = -ENOMEM; key = kmalloc(map->key_size, GFP_USER); if (!key) key = memdup_user(ukey, map->key_size); if (IS_ERR(key)) { err = PTR_ERR(key); goto err_put; err = -EFAULT; if (copy_from_user(key, ukey, map->key_size) != 0) goto free_key; } preempt_disable(); __this_cpu_inc(bpf_prog_active); Loading @@ -507,7 +498,6 @@ static int map_delete_elem(union bpf_attr *attr) if (!err) trace_bpf_map_delete_elem(map, ufd, key); free_key: kfree(key); err_put: fdput(f); Loading Loading @@ -536,14 +526,11 @@ static int map_get_next_key(union bpf_attr *attr) return PTR_ERR(map); if (ukey) { err = -ENOMEM; key = kmalloc(map->key_size, GFP_USER); if (!key) key = memdup_user(ukey, map->key_size); if (IS_ERR(key)) { err = PTR_ERR(key); goto err_put; err = -EFAULT; if (copy_from_user(key, ukey, map->key_size) != 0) goto free_key; } } else { key = NULL; } Loading