Message ID | 20200909045038.63181-7-parav@mellanox.com |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | devlink show controller number | expand |
On 9/8/20 10:50 PM, Parav Pandit wrote: > $ devlink port show pci/0000:06:00.0/2 > pci/0000:06:00.0/2: type eth netdev ens2f0c1pf0vf1 flavour pcivf controller 1 pfnum 0 vfnum 1 external true splittable false > function: > hw_addr 00:00:00:00:00:00 > > $ devlink port show pci/0000:06:00.0/2 -jp > { > "port": { > "pci/0000:06:00.0/2": { > "type": "eth", > "netdev": "ens2f0c1pf0vf1", That strlen is 14 chars. Any 2 ids go to a second digit and you overrrun the IFNAMSZ which means ... > diff --git a/net/core/devlink.c b/net/core/devlink.c > index 9cf5b118253b..91c12612f2b7 100644 > --- a/net/core/devlink.c > +++ b/net/core/devlink.c > @@ -7793,9 +7793,23 @@ static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port, > WARN_ON(1); > return -EINVAL; > case DEVLINK_PORT_FLAVOUR_PCI_PF: > + if (attrs->pci_pf.external) { > + n = snprintf(name, len, "c%u", attrs->pci_pf.controller); > + if (n >= len) > + return -EINVAL; ... this function returns EINVAL which is going to be confusing to users. > + len -= n; > + name += n; > + } > n = snprintf(name, len, "pf%u", attrs->pci_pf.pf); > break; > case DEVLINK_PORT_FLAVOUR_PCI_VF: > + if (attrs->pci_vf.external) { > + n = snprintf(name, len, "c%u", attrs->pci_vf.controller); > + if (n >= len) > + return -EINVAL; > + len -= n; > + name += n; > + } > n = snprintf(name, len, "pf%uvf%u", > attrs->pci_vf.pf, attrs->pci_vf.vf); > break; >
diff --git a/net/core/devlink.c b/net/core/devlink.c index 9cf5b118253b..91c12612f2b7 100644 --- a/net/core/devlink.c +++ b/net/core/devlink.c @@ -7793,9 +7793,23 @@ static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port, WARN_ON(1); return -EINVAL; case DEVLINK_PORT_FLAVOUR_PCI_PF: + if (attrs->pci_pf.external) { + n = snprintf(name, len, "c%u", attrs->pci_pf.controller); + if (n >= len) + return -EINVAL; + len -= n; + name += n; + } n = snprintf(name, len, "pf%u", attrs->pci_pf.pf); break; case DEVLINK_PORT_FLAVOUR_PCI_VF: + if (attrs->pci_vf.external) { + n = snprintf(name, len, "c%u", attrs->pci_vf.controller); + if (n >= len) + return -EINVAL; + len -= n; + name += n; + } n = snprintf(name, len, "pf%uvf%u", attrs->pci_vf.pf, attrs->pci_vf.vf); break;