Please check v3 of this patch. On Wed, Jul 23, 2025 at 5:19 PM Khadem Ullah <14pwcse1...@uetpeshawar.edu.pk> wrote:
> Secondary application not only breaking on device closing, > it's also getting segfault when we do "show device info all" from secondary > after primary closes: > > testpmd> show device info all > > ********************* Infos for device 0000:03:00.0 ********************* > Bus name: pci > Bus information: vendor_id=15b3, device_id=101d > Driver name: mlx5_pci > Devargs: > Connect to socket: 0 > > Segmentation fault (core dumped) > > This patch prevents these crashes and it seems that these fixes should be in > PMD along with the ethdev layer. Some more checks will be added in the next > version to prevent "show device info all" crash. > > > > On Wed, Jul 23, 2025 at 9:50 AM Khadem Ullah < > 14pwcse1...@uetpeshawar.edu.pk> wrote: > >> In secondary processes, directly accessing 'dev->data->dev_private' can >> cause a segmentation fault if the primary process has exited or if the >> shared memory is no longer accessible. >> >> This patch adds a safety check using rte_mem_virt2phy(), with an >> unlikely() branch hint to minimize performance impact in the fast path. >> This ensures 'dev_private' is still valid before accessing it. >> >> Fixes: bdad90d12ec8 ("ethdev: change device info get callback to return >> int") >> Cc: sta...@dpdk.org >> >> Signed-off-by: Khadem Ullah <14pwcse1...@uetpeshawar.edu.pk> >> --- >> lib/ethdev/rte_ethdev.c | 7 +++++++ >> 1 file changed, 7 insertions(+) >> >> diff --git a/lib/ethdev/rte_ethdev.c b/lib/ethdev/rte_ethdev.c >> index dd7c00bc94..ef5dc55f2e 100644 >> --- a/lib/ethdev/rte_ethdev.c >> +++ b/lib/ethdev/rte_ethdev.c >> @@ -4079,6 +4079,13 @@ rte_eth_dev_info_get(uint16_t port_id, struct >> rte_eth_dev_info *dev_info) >> >> if (dev->dev_ops->dev_infos_get == NULL) >> return -ENOTSUP; >> + if (rte_eal_process_type() == RTE_PROC_SECONDARY && >> + unlikely(rte_mem_virt2phy(dev->data->dev_private) == >> RTE_BAD_PHYS_ADDR)) { >> + RTE_ETHDEV_LOG_LINE(ERR, >> + "Secondary: dev_private not accessible (primary >> exited?)"); >> + rte_errno = ENODEV; >> + return -rte_errno; >> + } >> diag = dev->dev_ops->dev_infos_get(dev, dev_info); >> if (diag != 0) { >> /* Cleanup already filled in device information */ >> -- >> 2.43.0 >> >> > > -- > Engr. Khadem Ullah, > Software Engineer, > Dreambig Semiconductor Inc > https://dreambigsemi.com/ > -- Engr. Khadem Ullah, Software Engineer, Dreambig Semiconductor Inc https://dreambigsemi.com/