X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_pci%2Frte_pci.c;h=9c80c4b71dc03f08b49a66279cca78db3029ccf3;hb=d87f964ce6decd07f64091a36a55642b8960fd4e;hp=f400178bb63420a56292ea1ce6f53999222c2710;hpb=31f19a9beb8d88b67be6e469404081eb834d199c;p=dpdk.git diff --git a/lib/librte_pci/rte_pci.c b/lib/librte_pci/rte_pci.c index f400178bb6..9c80c4b71d 100644 --- a/lib/librte_pci/rte_pci.c +++ b/lib/librte_pci/rte_pci.c @@ -20,6 +20,7 @@ #include #include #include +#include #include "rte_pci.h" @@ -34,6 +35,12 @@ get_u8_pciaddr_field(const char *in, void *_u8, char dlm) if (*in == '\0') return NULL; + /* PCI field starting with spaces is forbidden. + * Negative wrap-around is not reported as an error by strtoul. + */ + if (*in == ' ' || *in == '-') + return NULL; + errno = 0; val = strtoul(in, &end, 16); if (errno != 0 || end[0] != dlm || val > UINT8_MAX) { @@ -69,11 +76,21 @@ pci_dbdf_parse(const char *input, struct rte_pci_addr *dev_addr) unsigned long val; char *end; + /* PCI id starting with spaces is forbidden. + * Negative wrap-around is not reported as an error by strtoul. + */ + if (*in == ' ' || *in == '-') + return -EINVAL; + errno = 0; val = strtoul(in, &end, 16); - if (errno != 0 || end[0] != ':' || val > UINT16_MAX) + /* Empty string is not an error for strtoul, but the check + * end[0] != ':' + * will detect the issue. + */ + if (errno != 0 || end[0] != ':' || val > UINT32_MAX) return -EINVAL; - dev_addr->domain = (uint16_t)val; + dev_addr->domain = (uint32_t)val; in = end + 1; in = get_u8_pciaddr_field(in, &dev_addr->bus, ':'); if (in == NULL) @@ -87,18 +104,6 @@ pci_dbdf_parse(const char *input, struct rte_pci_addr *dev_addr) return 0; } -int -eal_parse_pci_BDF(const char *input, struct rte_pci_addr *dev_addr) -{ - return pci_bdf_parse(input, dev_addr); -} - -int -eal_parse_pci_DomBDF(const char *input, struct rte_pci_addr *dev_addr) -{ - return pci_dbdf_parse(input, dev_addr); -} - void rte_pci_device_name(const struct rte_pci_addr *addr, char *output, size_t size) @@ -109,13 +114,6 @@ rte_pci_device_name(const struct rte_pci_addr *addr, addr->devid, addr->function) >= 0); } -int -rte_eal_compare_pci_addr(const struct rte_pci_addr *addr, - const struct rte_pci_addr *addr2) -{ - return rte_pci_addr_cmp(addr, addr2); -} - int rte_pci_addr_cmp(const struct rte_pci_addr *addr, const struct rte_pci_addr *addr2)