drivers/net: fix possible overflow using strlcat
authorChaitanya Babu Talluri <tallurix.chaitanya.babu@intel.com>
Fri, 22 Mar 2019 07:51:42 +0000 (07:51 +0000)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 22 Mar 2019 10:32:53 +0000 (11:32 +0100)
strcat does not check the destination length and there might be
chances of string overflow so instead of strcat, strlcat is used.

Fixes: 540a211084a7 ("bnx2x: driver core")
Fixes: e163c18a15b0 ("net/i40e: update ptype and pctype info")
Cc: stable@dpdk.org
Signed-off-by: Chaitanya Babu Talluri <tallurix.chaitanya.babu@intel.com>
Reviewed-by: Ferruh Yigit <ferruh.yigit@intel.com>
Acked-by: Shahed Shaikh <shshaikh@marvell.com>
drivers/net/bnx2x/bnx2x.c
drivers/net/i40e/i40e_ethdev.c

index 26b3828..ab092e2 100644 (file)
@@ -25,6 +25,7 @@
 #include <sys/stat.h>
 #include <fcntl.h>
 #include <zlib.h>
+#include <rte_string_fns.h>
 
 #define BNX2X_PMD_VER_PREFIX "BNX2X PMD"
 #define BNX2X_PMD_VERSION_MAJOR 1
@@ -11741,13 +11742,13 @@ static const char *get_bnx2x_flags(uint32_t flags)
 
        for (i = 0; i < 5; i++)
                if (flags & (1 << i)) {
-                       strcat(flag_str, flag[i]);
+                       strlcat(flag_str, flag[i], sizeof(flag_str));
                        flags ^= (1 << i);
                }
        if (flags) {
                static char unknown[BNX2X_INFO_STR_MAX];
                snprintf(unknown, 32, "Unknown flag mask %x", flags);
-               strcat(flag_str, unknown);
+               strlcat(flag_str, unknown, sizeof(flag_str));
        }
        return flag_str;
 }
index 8191a6a..63ec813 100644 (file)
@@ -12202,8 +12202,8 @@ i40e_update_customized_pctype(struct rte_eth_dev *dev, uint8_t *pkg,
                        for (n = 0; n < proto_num; n++) {
                                if (proto[n].proto_id != proto_id)
                                        continue;
-                               strcat(name, proto[n].name);
-                               strcat(name, "_");
+                               strlcat(name, proto[n].name, sizeof(name));
+                               strlcat(name, "_", sizeof(name));
                                break;
                        }
                }