From: Raslan Darawshehת Tuesday, May 8, 2018 3:20 PM
> The hot-plug alarm mechanism is responsible to practically execute both plug
> in and out operations. It periodically tries to detect missed sub-devices to
> be
> reconfigured and clean the resources of the removed sub-devices.
>
> The hot-plug alarm is started by the failsafe probe function, and it's wrongly
> not stopped if failsafe instance got an error. for example when starting
> failsafe
> with a MAC option, and giving it an invalid MAC address this will lead to a
> NULL
> pointer for the dev private field. Then when the hotplug alarm is called it
> will
> try to access this pointer, which will lead to a segmentation fault.
>
> Uninstall the hot-plug alarm in case of error in probe function.
>
> Fixes: a46f8d58 ("net/failsafe: add fail-safe PMD")
> Cc: sta...@dpdk.org
>
> Signed-off-by: Raslan Darawsheh <rasl...@mellanox.com>
Acked-by: Matan Azrad <ma...@mellanox.com>
>
> ---
> v2 changes:
> Reword the commit log.
>
> v3 changes:
> Reword the commit log.
> ---
> ---
> drivers/net/failsafe/failsafe.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/failsafe/failsafe.c
> b/drivers/net/failsafe/failsafe.c index
> 5e7a8ba..3a747c2 100644
> --- a/drivers/net/failsafe/failsafe.c
> +++ b/drivers/net/failsafe/failsafe.c
> @@ -226,7 +226,7 @@ fs_eth_dev_create(struct rte_vdev_device *vdev)
> mac);
> if (ret) {
> ERROR("Failed to set default MAC address");
> - goto free_args;
> + goto cancel_alarm;
> }
> }
> } else {
> @@ -260,6 +260,8 @@ fs_eth_dev_create(struct rte_vdev_device *vdev)
> .type = RTE_INTR_HANDLE_EXT,
> };
> return 0;
> +cancel_alarm:
> + failsafe_hotplug_alarm_cancel(dev);
> free_args:
> failsafe_args_free(dev);
> free_subs:
> --
> 2.7.4