pci: fix parsing of address without function number
authorThomas Monjalon <thomas@monjalon.net>
Sun, 11 Nov 2018 23:58:56 +0000 (00:58 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 13 Nov 2018 16:59:42 +0000 (17:59 +0100)
If the last part of the PCI address (function number) is missing,
the parsing was successful, assuming function 0.
The call to strtoul is not returning an error in such a case,
so an explicit check is inserted before.

This bug has always been there in older parsing macros:
- GET_PCIADDR_FIELD
- GET_BLACKLIST_FIELD

Fixes: af75078fece3 ("first public release")
Cc: stable@dpdk.org
Reported-by: Wisam Jaddo <wisamm@mellanox.com>
Signed-off-by: Thomas Monjalon <thomas@monjalon.net>
Acked-by: Gaetan Rivet <gaetan.rivet@6wind.com>
lib/librte_pci/rte_pci.c

index 530738d..f400178 100644 (file)
@@ -30,6 +30,10 @@ get_u8_pciaddr_field(const char *in, void *_u8, char dlm)
        uint8_t *u8 = _u8;
        char *end;
 
+       /* empty string is an error though strtoul() returns 0 */
+       if (*in == '\0')
+               return NULL;
+
        errno = 0;
        val = strtoul(in, &end, 16);
        if (errno != 0 || end[0] != dlm || val > UINT8_MAX) {