summaryrefslogtreecommitdiff
path: root/drivers/net/failsafe
diff options
context:
space:
mode:
authorRaslan Darawsheh <rasland@mellanox.com>2018-05-09 18:57:39 +0300
committerFerruh Yigit <ferruh.yigit@intel.com>2018-05-14 22:31:51 +0100
commit95e7a72f9decd1db38dfb754b485dd4ac6859def (patch)
tree3a48b4987bcefca528242dac512aea685bdd2984 /drivers/net/failsafe
parent807dd827b32677bd06266b31a71efcee50c85cd1 (diff)
downloaddpdk-next-eventdev-95e7a72f9decd1db38dfb754b485dd4ac6859def.zip
dpdk-next-eventdev-95e7a72f9decd1db38dfb754b485dd4ac6859def.tar.gz
dpdk-next-eventdev-95e7a72f9decd1db38dfb754b485dd4ac6859def.tar.xz
net/failsafe: fix probe cleanup
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: ebea83f8 ("net/failsafe: add plug-in support") Cc: stable@dpdk.org Signed-off-by: Raslan Darawsheh <rasland@mellanox.com> Acked-by: Matan Azrad <matan@mellanox.com> Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
Diffstat (limited to 'drivers/net/failsafe')
-rw-r--r--drivers/net/failsafe/failsafe.c4
1 files changed, 3 insertions, 1 deletions
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: