fsl/mc: Limit the ethernet name to ETH_NAME_LEN
authorPankaj Bansal <pankaj.bansal@nxp.com>
Thu, 2 Aug 2018 11:01:28 +0000 (16:31 +0530)
committerYork Sun <york.sun@nxp.com>
Wed, 8 Aug 2018 15:23:49 +0000 (08:23 -0700)
The ethernet name should be within the ETH_NAME_LEN, as this
is the buffer space allocated to ethernet name.

Otherwise, this causes buffer overflow.

Reported-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com>
Reviewed-by: York Sun <york.sun@nxp.com>
drivers/net/fsl-mc/mc.c
drivers/net/ldpaa_eth/ldpaa_eth.c

index 982024e31ea1f4cf782d65a6a972f0bf88c9b90b..940025a467379088021867349b96633f1c6f69bb 100644 (file)
@@ -322,7 +322,7 @@ static int mc_fixup_dpc_mac_addr(void *blob, int dpmac_id,
 static int mc_fixup_mac_addrs(void *blob, enum mc_fixup_type type)
 {
        int i, err = 0, ret = 0;
-       char ethname[10];
+       char ethname[ETH_NAME_LEN];
        struct eth_device *eth_dev;
 
        for (i = WRIOP1_DPMAC1; i < NUM_WRIOP_PORTS; i++) {
@@ -331,8 +331,8 @@ static int mc_fixup_mac_addrs(void *blob, enum mc_fixup_type type)
                    (wriop_get_phy_address(i) == -1))
                        continue;
 
-               sprintf(ethname, "DPMAC%d@%s", i,
-                       phy_interface_strings[wriop_get_enet_if(i)]);
+               snprintf(ethname, ETH_NAME_LEN, "DPMAC%d@%s", i,
+                        phy_interface_strings[wriop_get_enet_if(i)]);
 
                eth_dev = eth_get_dev_by_name(ethname);
                if (eth_dev == NULL)
index 79facb4a445a9b4c7f04072cbdcf5e3d494db597..a25b7cd906750eb70e3945180c4aca3602542414 100644 (file)
@@ -993,8 +993,8 @@ static int ldpaa_eth_netdev_init(struct eth_device *net_dev,
        int err;
        struct ldpaa_eth_priv *priv = (struct ldpaa_eth_priv *)net_dev->priv;
 
-       sprintf(net_dev->name, "DPMAC%d@%s", priv->dpmac_id,
-               phy_interface_strings[enet_if]);
+       snprintf(net_dev->name, ETH_NAME_LEN, "DPMAC%d@%s", priv->dpmac_id,
+                phy_interface_strings[enet_if]);
 
        net_dev->iobase = 0;
        net_dev->init = ldpaa_eth_open;