aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/bpf/syscall.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/bpf/syscall.c')
-rw-r--r--kernel/bpf/syscall.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
index 6e24fdf1f373..c35ebfe6d84d 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
@@ -352,7 +352,8 @@ static int map_lookup_elem(union bpf_attr *attr)
352 err = bpf_percpu_array_copy(map, key, value); 352 err = bpf_percpu_array_copy(map, key, value);
353 } else if (map->map_type == BPF_MAP_TYPE_STACK_TRACE) { 353 } else if (map->map_type == BPF_MAP_TYPE_STACK_TRACE) {
354 err = bpf_stackmap_copy(map, key, value); 354 err = bpf_stackmap_copy(map, key, value);
355 } else if (map->map_type == BPF_MAP_TYPE_ARRAY_OF_MAPS) { 355 } else if (map->map_type == BPF_MAP_TYPE_ARRAY_OF_MAPS ||
356 map->map_type == BPF_MAP_TYPE_HASH_OF_MAPS) {
356 err = -ENOTSUPP; 357 err = -ENOTSUPP;
357 } else { 358 } else {
358 rcu_read_lock(); 359 rcu_read_lock();
@@ -446,6 +447,11 @@ static int map_update_elem(union bpf_attr *attr)
446 err = bpf_fd_array_map_update_elem(map, f.file, key, value, 447 err = bpf_fd_array_map_update_elem(map, f.file, key, value,
447 attr->flags); 448 attr->flags);
448 rcu_read_unlock(); 449 rcu_read_unlock();
450 } else if (map->map_type == BPF_MAP_TYPE_HASH_OF_MAPS) {
451 rcu_read_lock();
452 err = bpf_fd_htab_map_update_elem(map, f.file, key, value,
453 attr->flags);
454 rcu_read_unlock();
449 } else { 455 } else {
450 rcu_read_lock(); 456 rcu_read_lock();
451 err = map->ops->map_update_elem(map, key, value, attr->flags); 457 err = map->ops->map_update_elem(map, key, value, attr->flags);