[PATCH 2/2] Memory Allocation: Fixes ms_idx jump (lookbehind) during find_prev_n() in fb_array library

Burakov, Anatoly anatoly.burakov at intel.com
Tue May 16 16:20:12 CEST 2023


Hi Vipin,

This commit should include a more detailed commit message, akin to one I 
suggested for the first patch.

For the patch itself:

Reviewed-by: Anatoly Burakov <anatoly.burakov at intel.com>


On 1/13/2023 1:08 PM, Vipin P R wrote:
> Cc: stable at dpdk.org
> 
> Signed-off-by: Vipin P R <vipinp at vmware.com>
> Acked-by: Kumara Parameshwaran <kparameshwar at vmware.com>
> ---
>   lib/eal/common/eal_common_fbarray.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/lib/eal/common/eal_common_fbarray.c b/lib/eal/common/eal_common_fbarray.c
> index 551bd87..90240e8 100644
> --- a/lib/eal/common/eal_common_fbarray.c
> +++ b/lib/eal/common/eal_common_fbarray.c
> @@ -511,7 +511,7 @@ find_prev_n(const struct rte_fbarray *arr, unsigned int start, unsigned int n,
>   				 * as well, so skip that on next iteration.
>   				 */
>   				ignore_msk = UINT64_MAX << need;
> -				msk_idx = lookbehind_idx;
> +				msk_idx = lookbehind_idx + 1;
>   				break;
>   			}
>   

The unit test code you suggested does not cover this case. I've reduced 
this bug to a minimal test case:

1. Allocate fbarray with 256 entries
2. Set idx 63 as used
3. Call rte_fbarray_find_prev_n_free() starting with index 64 and length 
of 2

Returned value should be 61, but without the fix it returns -1.

-- 
Thanks,
Anatoly



More information about the stable mailing list