Commit e029f541 authored by Jakub Kicinski's avatar Jakub Kicinski Committed by Daniel Borkmann

netdevsim: fix overflow on the error path

Undo loop condition on the error path would cause the i counter
to go below zero, if allocation failure happened with the first
(i.e. 0th) element of the array.

Fixes: 395cacb5 ("netdevsim: bpf: support fake map offload")
Reported-by: default avatarDan Carpenter <dan.carpenter@oracle.com>
Signed-off-by: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: default avatarSimon Horman <simon.horman@netronome.com>
Signed-off-by: default avatarDaniel Borkmann <daniel@iogearbox.net>
parent b2fe5fa6
...@@ -480,8 +480,7 @@ static int ...@@ -480,8 +480,7 @@ static int
nsim_bpf_map_alloc(struct netdevsim *ns, struct bpf_offloaded_map *offmap) nsim_bpf_map_alloc(struct netdevsim *ns, struct bpf_offloaded_map *offmap)
{ {
struct nsim_bpf_bound_map *nmap; struct nsim_bpf_bound_map *nmap;
unsigned int i; int i, err;
int err;
if (WARN_ON(offmap->map.map_type != BPF_MAP_TYPE_ARRAY && if (WARN_ON(offmap->map.map_type != BPF_MAP_TYPE_ARRAY &&
offmap->map.map_type != BPF_MAP_TYPE_HASH)) offmap->map.map_type != BPF_MAP_TYPE_HASH))
...@@ -518,7 +517,7 @@ nsim_bpf_map_alloc(struct netdevsim *ns, struct bpf_offloaded_map *offmap) ...@@ -518,7 +517,7 @@ nsim_bpf_map_alloc(struct netdevsim *ns, struct bpf_offloaded_map *offmap)
return 0; return 0;
err_free: err_free:
while (--i) { while (--i >= 0) {
kfree(nmap->entry[i].key); kfree(nmap->entry[i].key);
kfree(nmap->entry[i].value); kfree(nmap->entry[i].value);
} }
......
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