diff options
author | Vladislav Grishenko <themiron@yandex-team.ru> | 2022-09-28 13:37:02 +0500 |
---|---|---|
committer | Dave Barach <vpp@barachs.net> | 2023-03-19 12:17:23 +0000 |
commit | 8a4b79778f8b3149d663face83d37fbf96e12d05 (patch) | |
tree | 28a77bedaa359eecc075417cdc631dbedc7368b9 /src/vppinfra/pool.h | |
parent | b9c8c57e983246ec034bc9059b1740558c951d51 (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.h | 2 |
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) \ |