aboutsummaryrefslogtreecommitdiffstats
path: root/src/vppinfra/pool.h
diff options
context:
space:
mode:
authorVladislav Grishenko <themiron@yandex-team.ru>2022-09-28 13:37:02 +0500
committerDave Barach <vpp@barachs.net>2023-03-19 12:17:23 +0000
commit8a4b79778f8b3149d663face83d37fbf96e12d05 (patch)
tree28a77bedaa359eecc075417cdc631dbedc7368b9 /src/vppinfra/pool.h
parentb9c8c57e983246ec034bc9059b1740558c951d51 (diff)
vppinfra: fix pool free bitmap allocation
Using clib_bitmap_vec_validate makes free bitmap vector to be x64 times bigger (assuming x86_64) than necessary when non-zero and possible oom due (u32)(0 - 1) math with zero alloc. Fix it with clib_bitmap_validate which takes bit size, not index and ensure at least one bit is allocated. Type: fix Change-Id: I7e191f4e2fb3722a06bb800e1d075f7c7e2dcec9 Signed-off-by: Vladislav Grishenko <themiron@yandex-team.ru>
Diffstat (limited to 'src/vppinfra/pool.h')
-rw-r--r--src/vppinfra/pool.h2
1 files changed, 1 insertions, 1 deletions
diff --git a/src/vppinfra/pool.h b/src/vppinfra/pool.h
index ea22af4a68b..968614e0b9d 100644
--- a/src/vppinfra/pool.h
+++ b/src/vppinfra/pool.h
@@ -333,7 +333,7 @@ _pool_alloc (void **pp, uword n_elts, uword align, void *heap, uword elt_sz)
ph = pool_header (pp[0]);
vec_resize (ph->free_indices, n_elts);
vec_dec_len (ph->free_indices, n_elts);
- clib_bitmap_vec_validate (ph->free_bitmap, len + n_elts - 1);
+ clib_bitmap_validate (ph->free_bitmap, (len + n_elts) ?: 1);
}
#define pool_alloc_aligned_heap(P, N, A, H) \