summaryrefslogtreecommitdiffstats
path: root/kernel/bpf/syscall.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/bpf/syscall.c')
-rw-r--r--kernel/bpf/syscall.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c
index 0834958f1dc4..ec7c552af76b 100644
--- a/kernel/bpf/syscall.c
+++ b/kernel/bpf/syscall.c
@@ -740,8 +740,13 @@ static int map_lookup_elem(union bpf_attr *attr)
740 740
741 if (bpf_map_is_dev_bound(map)) { 741 if (bpf_map_is_dev_bound(map)) {
742 err = bpf_map_offload_lookup_elem(map, key, value); 742 err = bpf_map_offload_lookup_elem(map, key, value);
743 } else if (map->map_type == BPF_MAP_TYPE_PERCPU_HASH || 743 goto done;
744 map->map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH) { 744 }
745
746 preempt_disable();
747 this_cpu_inc(bpf_prog_active);
748 if (map->map_type == BPF_MAP_TYPE_PERCPU_HASH ||
749 map->map_type == BPF_MAP_TYPE_LRU_PERCPU_HASH) {
745 err = bpf_percpu_hash_copy(map, key, value); 750 err = bpf_percpu_hash_copy(map, key, value);
746 } else if (map->map_type == BPF_MAP_TYPE_PERCPU_ARRAY) { 751 } else if (map->map_type == BPF_MAP_TYPE_PERCPU_ARRAY) {
747 err = bpf_percpu_array_copy(map, key, value); 752 err = bpf_percpu_array_copy(map, key, value);
@@ -777,7 +782,10 @@ static int map_lookup_elem(union bpf_attr *attr)
777 } 782 }
778 rcu_read_unlock(); 783 rcu_read_unlock();
779 } 784 }
785 this_cpu_dec(bpf_prog_active);
786 preempt_enable();
780 787
788done:
781 if (err) 789 if (err)
782 goto free_value; 790 goto free_value;
783 791