@@ -187,7 +187,7 @@ struct dpdk_ring {
/* For the client rings */
struct rte_ring *cring_tx;
struct rte_ring *cring_rx;
- int user_port_id; /* User given port no, parsed from port name */
+ unsigned int user_port_id; /* User given port no, parsed from port name */
int eth_port_id; /* ethernet device port id */
struct ovs_list list_node OVS_GUARDED_BY(dpdk_mutex);
};
@@ -636,6 +636,8 @@ unlock:
return err;
}
+/* dev_name must be the prefix followed by a positive decimal number.
+ * (no leading + or - signs are allowed) */
static int
dpdk_dev_parse_name(const char dev_name[], const char prefix[],
unsigned int *port_no)
@@ -647,8 +649,11 @@ dpdk_dev_parse_name(const char dev_name[], const char prefix[],
}
cport = dev_name + strlen(prefix);
- *port_no = strtol(cport, NULL, 0); /* string must be null terminated */
- return 0;
+
+ if(str_to_uint(cport, 10, port_no))
+ return 0;
+ else
+ return ENODEV;
}
static int
Current implementation of dpdk_dev_parse_name does not perform a robust error handling, port names as "dpdkr" and "dpdkr1x" are considered valid. With this patch only positive port numbers in decimal notation are considered valid. Signed-off-by: Mauricio Vasquez B <mauricio.vasquezbernal@studenti.polito.it> --- v3: - use str_to_uint lib/netdev-dpdk.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)