On Thu, 5 Nov 2026 at 08:17, Maayan Kashani <[email protected]> wrote: > > With --huge-unlink=never the hugepage files are kept and mapped again > on the next run. The kernel only zeroes a hugepage the first time it is > mapped from a given file, so these pages still hold the previous run's > content. > > The dynamic memory path records this by setting RTE_MEMSEG_FLAG_DIRTY > in alloc_seg(). The legacy path in remap_segment() never sets ms->flags, > so rte_zmalloc_socket() skips the memset and returns stale data. > > With --legacy-mem --huge-unlink=never, a second process gets non-zeroed > memory from rte_zmalloc(). mlx5 with sys_mem_en disabled allocates its > internal structures through rte_zmalloc_socket() and then reads stale > pointers from them, which crashes in mlx5_ipool_malloc_cache() during > probe: > > SEGV on unknown address 0x000000000308 > #0 _mlx5_ipool_malloc_cache drivers/net/mlx5/mlx5_utils.c:550 > ... > #16 mlx5_alloc_shared_dr drivers/net/mlx5/linux/mlx5_os.c:628 > > Set RTE_MEMSEG_FLAG_DIRTY on segments remapped in legacy mode whenever > existing hugepage files are reused, matching the dynamic path. Why a > reused page is dirty is documented on unlink_existing. > > Fixes: 32b4771cd8ef ("eal/linux: allow hugepage file reuse") > Cc: [email protected] > > Signed-off-by: Maayan Kashani <[email protected]> > Acked-by: Dmitry Kozlyuk <[email protected]>
Applied, thanks. -- David Marchand

