X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_pci%2Frte_pci.c;h=c91be8b16777afa30b1c7e6c4ce402758d5fc39f;hb=5b38d8cd4663;hp=a753cf3eca874f95fe63b5ee716ec12aef1ecc63;hpb=ca52fccbb3b9c3409c39650d826ae883a60270d1;p=dpdk.git diff --git a/lib/librte_pci/rte_pci.c b/lib/librte_pci/rte_pci.c index a753cf3eca..c91be8b167 100644 --- a/lib/librte_pci/rte_pci.c +++ b/lib/librte_pci/rte_pci.c @@ -9,17 +9,18 @@ #include #include #include -#include #include #include #include #include +#include #include #include #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) @@ -127,43 +144,3 @@ rte_pci_addr_parse(const char *str, struct rte_pci_addr *addr) return 0; return -1; } - - -/* map a particular resource from a file */ -void * -pci_map_resource(void *requested_addr, int fd, off_t offset, size_t size, - int additional_flags) -{ - void *mapaddr; - - /* Map the PCI memory resource of device */ - mapaddr = mmap(requested_addr, size, PROT_READ | PROT_WRITE, - MAP_SHARED | additional_flags, fd, offset); - if (mapaddr == MAP_FAILED) { - RTE_LOG(ERR, EAL, - "%s(): cannot mmap(%d, %p, 0x%zx, 0x%llx): %s (%p)\n", - __func__, fd, requested_addr, size, - (unsigned long long)offset, - strerror(errno), mapaddr); - } else - RTE_LOG(DEBUG, EAL, " PCI memory mapped at %p\n", mapaddr); - - return mapaddr; -} - -/* unmap a particular resource */ -void -pci_unmap_resource(void *requested_addr, size_t size) -{ - if (requested_addr == NULL) - return; - - /* Unmap the PCI memory resource of device */ - if (munmap(requested_addr, size)) { - RTE_LOG(ERR, EAL, "%s(): cannot munmap(%p, %#zx): %s\n", - __func__, requested_addr, size, - strerror(errno)); - } else - RTE_LOG(DEBUG, EAL, " PCI memory unmapped at %p\n", - requested_addr); -}