[dpdk-dev] net/failsafe: fix starting failsafe with invalid MAC

Message ID 1525695435-14917-1-git-send-email-rasland@mellanox.com (mailing list archive)
State Superseded, archived
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Raslan Darawsheh May 7, 2018, 12:17 p.m. UTC
  When starting failsafe with mac option, and giving it an invalid MAC. It
will cause a segmentation fault due to the hotplug_alarm installed on an
invalid subdev.

Fixes: a46f8d58 ("net/failsafe: add fail-safe PMD")
Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>
---
 drivers/net/failsafe/failsafe.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
  

Comments

Gaëtan Rivet May 9, 2018, 11:46 a.m. UTC | #1
Hello Raslan,

Thank you for fixing this bug.

On Mon, May 07, 2018 at 03:17:15PM +0300, Raslan Darawsheh wrote:
> When starting failsafe with mac option, and giving it an invalid MAC. It
> will cause a segmentation fault due to the hotplug_alarm installed on an
> invalid subdev.
> 
> Fixes: a46f8d58 ("net/failsafe: add fail-safe PMD")

Only issue I have with this patch is that it should fix instead the commit

Fixes: ebea83f8 ("net/failsafe: add plug-in support")

Which introduced the alarm_install routine.

> Signed-off-by: Raslan Darawsheh <rasland@mellanox.com>

Otherwise:
Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>

> ---
>  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
> 

Thanks,
  

Patch

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: