examples/ethtool: fix querying non-PCI devices
authorRemy Horton <remy.horton@intel.com>
Wed, 30 Nov 2016 02:47:29 +0000 (10:47 +0800)
committerThomas Monjalon <thomas.monjalon@6wind.com>
Tue, 20 Dec 2016 15:06:41 +0000 (16:06 +0100)
Doing a device information query on a non-PCI device such as
vhost was resulting in the dereferencing of a NULL pointer
(the absent PCI data), causing a segmentation fault.

Fixes: bda68ab9d1e7 ("examples/ethtool: add user-space ethtool sample application")

Signed-off-by: Remy Horton <remy.horton@intel.com>
doc/guides/rel_notes/release_17_02.rst
examples/ethtool/lib/rte_ethtool.c

index 3b65038..23f335a 100644 (file)
@@ -70,6 +70,11 @@ Libraries
 Examples
 ~~~~~~~~
 
+* **examples/ethtool: Fixed crash with non-PCI devices.**
+
+  Querying a non-PCI device was dereferencing non-existent PCI data
+  resulting in a segmentation fault.
+
 
 Other
 ~~~~~
index a1f91d4..6f0ce84 100644 (file)
@@ -61,10 +61,15 @@ rte_ethtool_get_drvinfo(uint8_t port_id, struct ethtool_drvinfo *drvinfo)
                dev_info.driver_name);
        snprintf(drvinfo->version, sizeof(drvinfo->version), "%s",
                rte_version());
-       snprintf(drvinfo->bus_info, sizeof(drvinfo->bus_info),
-               "%04x:%02x:%02x.%x",
-               dev_info.pci_dev->addr.domain, dev_info.pci_dev->addr.bus,
-               dev_info.pci_dev->addr.devid, dev_info.pci_dev->addr.function);
+       if (dev_info.pci_dev)
+               snprintf(drvinfo->bus_info, sizeof(drvinfo->bus_info),
+                       "%04x:%02x:%02x.%x",
+                       dev_info.pci_dev->addr.domain,
+                       dev_info.pci_dev->addr.bus,
+                       dev_info.pci_dev->addr.devid,
+                       dev_info.pci_dev->addr.function);
+       else
+               snprintf(drvinfo->bus_info, sizeof(drvinfo->bus_info), "N/A");
 
        memset(&reg_info, 0, sizeof(reg_info));
        rte_eth_dev_get_reg_info(port_id, &reg_info);