From: Damjan Marion Date: Mon, 6 Nov 2023 17:37:04 +0000 (+0000) Subject: vppinfra: fix ASAN issue in vec_foreach_pointer and pool_foreach_pointer X-Git-Tag: v24.06-rc0~160 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=e73c731ad8890d1b64c55e3e9dfb9fc8529624f9;p=vpp.git vppinfra: fix ASAN issue in vec_foreach_pointer and pool_foreach_pointer Change-Id: If9381ae7283488b352a3c22f85732cd56ac6bfd9 Type: fix Fixes: 9937359, 91ff0e9 Signed-off-by: Damjan Marion --- diff --git a/src/vppinfra/pool.h b/src/vppinfra/pool.h index 99138386fe6..1a414aef65f 100644 --- a/src/vppinfra/pool.h +++ b/src/vppinfra/pool.h @@ -571,9 +571,10 @@ do { \ /* works only for pool of pointers, e is declared inside macro */ #define pool_foreach_pointer(e, p) \ if (p) \ - for (typeof ((p)[0]) *_t = (p) + pool_get_first_index (p), (e) = *_t; \ - _t < vec_end (p); \ - _t = (p) + pool_get_next_index (p, _t - (p)), (e) = *_t) + for (typeof ((p)[0]) *_t = (p) + pool_get_first_index (p), (e) = *_t, \ + *_end = vec_end (p); \ + _t < _end; _t = (p) + pool_get_next_index (p, _t - (p)), \ + (e) = _t < _end ? *_t : (e)) /** * @brief Remove all elements from a pool in a safe way diff --git a/src/vppinfra/vec_bootstrap.h b/src/vppinfra/vec_bootstrap.h index 5ea7a8003f5..5d386b1eaad 100644 --- a/src/vppinfra/vec_bootstrap.h +++ b/src/vppinfra/vec_bootstrap.h @@ -240,8 +240,8 @@ _vec_set_len (void *v, uword len, uword elt_sz) #define vec_foreach_pointer(e, v) \ if (v) \ - for (typeof (**v) **__ep = (v), *(e) = *__ep; __ep - (v) < vec_len (v); \ - __ep++, (e) = *__ep) + for (typeof (**v) **__ep = (v), **__end = vec_end (v), *(e) = *__ep; \ + __ep < __end; __ep++, (e) = __ep < __end ? *__ep : (e)) #endif /* included_clib_vec_bootstrap_h */