From 83d63f0903b3951c76a4508693e8bade582b28b0 Mon Sep 17 00:00:00 2001 From: Matan Azrad Date: Mon, 21 May 2018 16:23:30 +0000 Subject: [PATCH] net/vdev_netvsc: fix automatic probing The vdev_netvsc driver allows an automatic probe in Hyper-V VM systems unless it was already specified by the EAL command line. The detection of a specified NetVSC device is wrongly done by comparing the vdev_netvsc driver name to all the vdev devices names, including the suffix device index. Thus, if the user specifies the vdev_netvsc device by adding an index to the device name, the comparison fails. Consequently, the vdev_netvsc driver may automatically probe NetVSC devices, despite the NetVSC device that was specified by the EAL command line. Compare the vdev_netvsc driver name to the devices names without the index. Fixes: 56252de779a6 ("net/vdev_netvsc: add automatic probing") Cc: stable@dpdk.org Signed-off-by: Matan Azrad --- drivers/net/vdev_netvsc/vdev_netvsc.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/net/vdev_netvsc/vdev_netvsc.c b/drivers/net/vdev_netvsc/vdev_netvsc.c index de2bd14793..48717f2f0d 100644 --- a/drivers/net/vdev_netvsc/vdev_netvsc.c +++ b/drivers/net/vdev_netvsc/vdev_netvsc.c @@ -39,6 +39,7 @@ #define VDEV_NETVSC_DRIVER net_vdev_netvsc #define VDEV_NETVSC_DRIVER_NAME RTE_STR(VDEV_NETVSC_DRIVER) +#define VDEV_NETVSC_DRIVER_NAME_LEN 15 #define VDEV_NETVSC_ARG_IFACE "iface" #define VDEV_NETVSC_ARG_MAC "mac" #define VDEV_NETVSC_ARG_FORCE "force" @@ -798,7 +799,8 @@ static int vdev_netvsc_cmp_rte_device(const struct rte_device *dev1, __rte_unused const void *_dev2) { - return strcmp(dev1->devargs->name, VDEV_NETVSC_DRIVER_NAME); + return strncmp(dev1->devargs->name, VDEV_NETVSC_DRIVER_NAME, + VDEV_NETVSC_DRIVER_NAME_LEN); } /** @@ -814,7 +816,8 @@ vdev_netvsc_scan_callback(__rte_unused void *arg) struct rte_bus *vbus = rte_bus_find_by_name("vdev"); RTE_EAL_DEVARGS_FOREACH("vdev", devargs) - if (!strcmp(devargs->name, VDEV_NETVSC_DRIVER_NAME)) + if (!strncmp(devargs->name, VDEV_NETVSC_DRIVER_NAME, + VDEV_NETVSC_DRIVER_NAME_LEN)) return; dev = (struct rte_vdev_device *)vbus->find_device(NULL, vdev_netvsc_cmp_rte_device, VDEV_NETVSC_DRIVER_NAME); -- 2.20.1