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/

Reply via email to