The size argument to the PMD can not be larger than the largest
per-mbuf data segment size; otherwise the logic in eth_null_rx()
would generate an invalid mbuf.

Fixes: 4df90194f2a2 ("net/null: prefer unsigned int")
Cc: [email protected]

Signed-off-by: Stephen Hemminger <[email protected]>
---
 drivers/net/null/rte_eth_null.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/drivers/net/null/rte_eth_null.c b/drivers/net/null/rte_eth_null.c
index 4b4d996686..aee7754654 100644
--- a/drivers/net/null/rte_eth_null.c
+++ b/drivers/net/null/rte_eth_null.c
@@ -611,14 +611,17 @@ get_packet_size_arg(const char *key __rte_unused,
 {
        const char *a = value;
        unsigned int *packet_size = extra_args;
+       unsigned long sz;
 
        if ((value == NULL) || (extra_args == NULL))
                return -EINVAL;
 
-       *packet_size = (unsigned int)strtoul(a, NULL, 0);
-       if (*packet_size == UINT_MAX)
-               return -1;
+       errno = 0;
+       sz = strtoul(a, NULL, 0);
+       if (sz > UINT16_MAX || errno != 0)
+               return -EINVAL;
 
+       *packet_size = sz;
        return 0;
 }
 
-- 
2.51.0

Reply via email to