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.vasquezber...@studenti.polito.it> --- v3: - use str_to_uint lib/netdev-dpdk.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/netdev-dpdk.c b/lib/netdev-dpdk.c index de7e488..0fe0151 100644 --- a/lib/netdev-dpdk.c +++ b/lib/netdev-dpdk.c @@ -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 -- 1.9.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev