diff options
Diffstat (limited to 'kernel/bpf/verifier.c')
-rw-r--r-- | kernel/bpf/verifier.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index f72f23b8fdab..daea765d72e6 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c | |||
@@ -194,6 +194,7 @@ struct verifier_env { | |||
194 | struct verifier_state_list **explored_states; /* search pruning optimization */ | 194 | struct verifier_state_list **explored_states; /* search pruning optimization */ |
195 | struct bpf_map *used_maps[MAX_USED_MAPS]; /* array of map's used by eBPF program */ | 195 | struct bpf_map *used_maps[MAX_USED_MAPS]; /* array of map's used by eBPF program */ |
196 | u32 used_map_cnt; /* number of used maps */ | 196 | u32 used_map_cnt; /* number of used maps */ |
197 | u32 id_gen; /* used to generate unique reg IDs */ | ||
197 | bool allow_ptr_leaks; | 198 | bool allow_ptr_leaks; |
198 | }; | 199 | }; |
199 | 200 | ||
@@ -1052,7 +1053,7 @@ static int check_map_func_compatibility(struct bpf_map *map, int func_id) | |||
1052 | goto error; | 1053 | goto error; |
1053 | break; | 1054 | break; |
1054 | case BPF_MAP_TYPE_CGROUP_ARRAY: | 1055 | case BPF_MAP_TYPE_CGROUP_ARRAY: |
1055 | if (func_id != BPF_FUNC_skb_in_cgroup) | 1056 | if (func_id != BPF_FUNC_skb_under_cgroup) |
1056 | goto error; | 1057 | goto error; |
1057 | break; | 1058 | break; |
1058 | default: | 1059 | default: |
@@ -1074,7 +1075,7 @@ static int check_map_func_compatibility(struct bpf_map *map, int func_id) | |||
1074 | if (map->map_type != BPF_MAP_TYPE_STACK_TRACE) | 1075 | if (map->map_type != BPF_MAP_TYPE_STACK_TRACE) |
1075 | goto error; | 1076 | goto error; |
1076 | break; | 1077 | break; |
1077 | case BPF_FUNC_skb_in_cgroup: | 1078 | case BPF_FUNC_skb_under_cgroup: |
1078 | if (map->map_type != BPF_MAP_TYPE_CGROUP_ARRAY) | 1079 | if (map->map_type != BPF_MAP_TYPE_CGROUP_ARRAY) |
1079 | goto error; | 1080 | goto error; |
1080 | break; | 1081 | break; |
@@ -1301,7 +1302,7 @@ add_imm: | |||
1301 | /* dst_reg stays as pkt_ptr type and since some positive | 1302 | /* dst_reg stays as pkt_ptr type and since some positive |
1302 | * integer value was added to the pointer, increment its 'id' | 1303 | * integer value was added to the pointer, increment its 'id' |
1303 | */ | 1304 | */ |
1304 | dst_reg->id++; | 1305 | dst_reg->id = ++env->id_gen; |
1305 | 1306 | ||
1306 | /* something was added to pkt_ptr, set range and off to zero */ | 1307 | /* something was added to pkt_ptr, set range and off to zero */ |
1307 | dst_reg->off = 0; | 1308 | dst_reg->off = 0; |