diff options
Diffstat (limited to 'net/core/sock_map.c')
-rw-r--r-- | net/core/sock_map.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/net/core/sock_map.c b/net/core/sock_map.c index be6092ac69f8..52d4faeee18b 100644 --- a/net/core/sock_map.c +++ b/net/core/sock_map.c | |||
@@ -44,13 +44,7 @@ static struct bpf_map *sock_map_alloc(union bpf_attr *attr) | |||
44 | 44 | ||
45 | /* Make sure page count doesn't overflow. */ | 45 | /* Make sure page count doesn't overflow. */ |
46 | cost = (u64) stab->map.max_entries * sizeof(struct sock *); | 46 | cost = (u64) stab->map.max_entries * sizeof(struct sock *); |
47 | if (cost >= U32_MAX - PAGE_SIZE) { | 47 | err = bpf_map_charge_init(&stab->map.memory, cost); |
48 | err = -EINVAL; | ||
49 | goto free_stab; | ||
50 | } | ||
51 | |||
52 | stab->map.pages = round_up(cost, PAGE_SIZE) >> PAGE_SHIFT; | ||
53 | err = bpf_map_precharge_memlock(stab->map.pages); | ||
54 | if (err) | 48 | if (err) |
55 | goto free_stab; | 49 | goto free_stab; |
56 | 50 | ||
@@ -60,6 +54,7 @@ static struct bpf_map *sock_map_alloc(union bpf_attr *attr) | |||
60 | if (stab->sks) | 54 | if (stab->sks) |
61 | return &stab->map; | 55 | return &stab->map; |
62 | err = -ENOMEM; | 56 | err = -ENOMEM; |
57 | bpf_map_charge_finish(&stab->map.memory); | ||
63 | free_stab: | 58 | free_stab: |
64 | kfree(stab); | 59 | kfree(stab); |
65 | return ERR_PTR(err); | 60 | return ERR_PTR(err); |