Unverified Commit e3768967 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!6904 bpf: Fix DEVMAP_HASH overflow check on 32-bit arches

parents 43085dbc 66f98c80
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -131,10 +131,13 @@ static int dev_map_init_map(struct bpf_dtab *dtab, union bpf_attr *attr)
	bpf_map_init_from_attr(&dtab->map, attr);

	if (attr->map_type == BPF_MAP_TYPE_DEVMAP_HASH) {
		dtab->n_buckets = roundup_pow_of_two(dtab->map.max_entries);

		if (!dtab->n_buckets) /* Overflow check */
		/* 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);
		cost += (u64) sizeof(struct hlist_head) * dtab->n_buckets;
	} else {
		cost += (u64) dtab->map.max_entries * sizeof(struct bpf_dtab_netdev *);