Reapply "bpf: Fix DEVMAP_HASH overflow check on 32-bit arches"

This reverts commit ccff2373d6.
This commit is contained in:
Ksawlii 2024-11-24 00:23:17 +01:00
parent d439656b70
commit 40967b338d

View file

@ -129,13 +129,14 @@ static int dev_map_init_map(struct bpf_dtab *dtab, union bpf_attr *attr)
bpf_map_init_from_attr(&dtab->map, attr); bpf_map_init_from_attr(&dtab->map, attr);
if (attr->map_type == BPF_MAP_TYPE_DEVMAP_HASH) { if (attr->map_type == BPF_MAP_TYPE_DEVMAP_HASH) {
/* hash table size must be power of 2; roundup_pow_of_two() can
* overflow into UB on 32-bit arches, so check that first
*/
if (dtab->map.max_entries > 1UL << 31)
return -EINVAL;
dtab->n_buckets = roundup_pow_of_two(dtab->map.max_entries); dtab->n_buckets = roundup_pow_of_two(dtab->map.max_entries);
if (!dtab->n_buckets) /* Overflow check */
return -EINVAL;
}
if (attr->map_type == BPF_MAP_TYPE_DEVMAP_HASH) {
dtab->dev_index_head = dev_map_create_hash(dtab->n_buckets, dtab->dev_index_head = dev_map_create_hash(dtab->n_buckets,
dtab->map.numa_node); dtab->map.numa_node);
if (!dtab->dev_index_head) if (!dtab->dev_index_head)