[3/5] net/pcap: fix segment fault when parse devargs
Checks
Commit Message
The rte_kvargs_process() was used to parse KV pairs, it also supports
to parse 'only keys' (e.g. socket_id) type. And the callback function
parameter 'value' is NULL when parsed 'only keys'.
This patch fixes segment fault when parse input args with 'only keys'.
Fixes: 4c173302c307 ("pcap: add new driver")
Fixes: 53bf48403409 ("net/pcap: capture only ingress packets from Rx iface")
Fixes: c9507cd0cada ("net/pcap: support physical interface MAC address")
Fixes: a3f5252e5cbd ("net/pcap: enable infinitely Rx a pcap file")
Cc: stable@dpdk.org
Signed-off-by: Chengwen Feng <fengchengwen@huawei.com>
---
drivers/net/pcap/pcap_ethdev.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
Comments
On 3/14/2023 12:48 PM, Chengwen Feng wrote:
> The rte_kvargs_process() was used to parse KV pairs, it also supports
> to parse 'only keys' (e.g. socket_id) type. And the callback function
> parameter 'value' is NULL when parsed 'only keys'.
>
> This patch fixes segment fault when parse input args with 'only keys'.
>
> Fixes: 4c173302c307 ("pcap: add new driver")
> Fixes: 53bf48403409 ("net/pcap: capture only ingress packets from Rx iface")
> Fixes: c9507cd0cada ("net/pcap: support physical interface MAC address")
> Fixes: a3f5252e5cbd ("net/pcap: enable infinitely Rx a pcap file")
> Cc: stable@dpdk.org
>
Can you please check following callbacks too:
`rx_iface_args_process()`
`open_tx_iface()`
@@ -1034,6 +1034,9 @@ open_rx_pcap(const char *key, const char *value, void *extra_args)
struct pmd_devargs *rx = extra_args;
pcap_t *pcap = NULL;
+ if (value == NULL || extra_args == NULL)
+ return -EINVAL;
+
if (open_single_rx_pcap(pcap_filename, &pcap) < 0)
return -1;
@@ -1056,6 +1059,9 @@ open_tx_pcap(const char *key, const char *value, void *extra_args)
struct pmd_devargs *dumpers = extra_args;
pcap_dumper_t *dumper;
+ if (value == NULL || extra_args == NULL)
+ return -EINVAL;
+
if (open_single_tx_pcap(pcap_filename, &dumper) < 0)
return -1;
@@ -1077,6 +1083,9 @@ open_rx_tx_iface(const char *key, const char *value, void *extra_args)
struct pmd_devargs *tx = extra_args;
pcap_t *pcap = NULL;
+ if (value == NULL || extra_args == NULL)
+ return -EINVAL;
+
if (open_single_iface(iface, &pcap) < 0)
return -1;
@@ -1163,7 +1172,7 @@ static int
select_phy_mac(const char *key __rte_unused, const char *value,
void *extra_args)
{
- if (extra_args) {
+ if (value != NULL && extra_args != NULL) {
const int phy_mac = atoi(value);
int *enable_phy_mac = extra_args;
@@ -1177,7 +1186,7 @@ static int
get_infinite_rx_arg(const char *key __rte_unused,
const char *value, void *extra_args)
{
- if (extra_args) {
+ if (value != NULL && extra_args != NULL) {
const int infinite_rx = atoi(value);
int *enable_infinite_rx = extra_args;