From 1bdea6110ab527e3b26a3387cf95bf6ab14b97d6 Mon Sep 17 00:00:00 2001 From: Kirill Rybalchenko Date: Mon, 14 May 2018 11:00:51 +0100 Subject: [PATCH] examples/ipsec-secgw: fix IP address parsing In strlcpy function parameters there was no allowance for null terminator, so ip address was copied without last character. Fixes: ae943ebe1ed3 ("examples/ipsec-secgw: replace strncpy with strlcpy") Cc: stable@dpdk.org Signed-off-by: Kirill Rybalchenko Acked-by: Pablo de Lara --- examples/ipsec-secgw/parser.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/examples/ipsec-secgw/parser.c b/examples/ipsec-secgw/parser.c index e2e3429085..91282ca944 100644 --- a/examples/ipsec-secgw/parser.c +++ b/examples/ipsec-secgw/parser.c @@ -213,8 +213,9 @@ parse_ipv4_addr(const char *token, struct in_addr *ipv4, uint32_t *mask) pch = strchr(token, '/'); if (pch != NULL) { - strlcpy(ip_str, token, RTE_MIN((unsigned int long)(pch - token), - sizeof(ip_str))); + strlcpy(ip_str, token, + RTE_MIN((unsigned int long)(pch - token + 1), + sizeof(ip_str))); pch += 1; if (is_str_num(pch) != 0) return -EINVAL; @@ -225,7 +226,6 @@ parse_ipv4_addr(const char *token, struct in_addr *ipv4, uint32_t *mask) if (mask) *mask = 0; } - if (strlen(ip_str) >= INET_ADDRSTRLEN) return -EINVAL; @@ -243,7 +243,8 @@ parse_ipv6_addr(const char *token, struct in6_addr *ipv6, uint32_t *mask) pch = strchr(token, '/'); if (pch != NULL) { - strlcpy(ip_str, token, RTE_MIN((unsigned int long)(pch - token), + strlcpy(ip_str, token, + RTE_MIN((unsigned int long)(pch - token + 1), sizeof(ip_str))); pch += 1; if (is_str_num(pch) != 0) -- 2.20.1