[EXTERNAL] [PATCH v7 04/16] event/cnxk: fix pointer mismatch in cleanup
Pavan Nikhilesh Bhagavatula
pbhagavatula at marvell.com
Thu Oct 3 07:52:34 CEST 2024
> The code to cleanup in case of error was passing incorrect
> value to rte_free. The ports[] entry was allocated with
> rte_malloc and that should be used instead of the offset
> in that object.
>
> Fixes: 97a05c1fe634 ("event/cnxk: add port config")
> Cc: sthotton at marvell.com
> Cc: stable at dpdk.org
>
> Signed-off-by: Stephen Hemminger <stephen at networkplumber.org>
> ---
> drivers/event/cnxk/cnxk_eventdev.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/event/cnxk/cnxk_eventdev.c
> b/drivers/event/cnxk/cnxk_eventdev.c
> index 4b2d6bffa6..08c6ce0c07 100644
> --- a/drivers/event/cnxk/cnxk_eventdev.c
> +++ b/drivers/event/cnxk/cnxk_eventdev.c
> @@ -121,8 +121,10 @@ cnxk_setup_event_ports(const struct rte_eventdev
> *event_dev,
> return 0;
> hws_fini:
> for (i = i - 1; i >= 0; i--) {
> + void *ws = event_dev->data->ports[i];
> +
> event_dev->data->ports[i] = NULL;
> - rte_free(cnxk_sso_hws_get_cookie(event_dev->data-
> >ports[i]));
> + rte_free(ws);
Hi Stephen,
The rte_zmalloc memory is pointing to the cookie[1], the memory assigned to
event_dev->data->ports[i] is rte_zmalloc + RTE_CACHE_LINE_SIZE.
There is still a bug in the code where we are assigning NULL before freeing memory.
The fix should be
rte_free(cnxk_sso_hws_get_cookie(event_dev->data->ports[i]));
event_dev->data->ports[i] = NULL;
[1]
/* Allocate event port memory */
ws = rte_zmalloc("cn10k_ws",
sizeof(struct cn10k_sso_hws) + RTE_CACHE_LINE_SIZE,
RTE_CACHE_LINE_SIZE);
/* First cache line is reserved for cookie */
ws = (struct cn10k_sso_hws *)((uint8_t *)ws + RTE_CACHE_LINE_SIZE);
Thanks,
Pavan.
> }
> return -ENOMEM;
> }
> --
> 2.45.2
More information about the dev
mailing list