e1000e: properly bounds-check string functions
authorBruce Allan <bruce.w.allan@intel.com>
Thu, 6 Jan 2011 14:29:50 +0000 (14:29 +0000)
committerDavid S. Miller <davem@davemloft.net>
Mon, 10 Jan 2011 07:44:08 +0000 (23:44 -0800)
Use string functions with bounds checking rather than their non-bounds
checking counterparts, and do not hard code these boundaries.

Signed-off-by: Bruce Allan <bruce.w.allan@intel.com>
Tested-by: Emil Tantilov <emil.s.tantilov@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/e1000e/ethtool.c
drivers/net/e1000e/netdev.c

index affcacf6f5a98499c76bf70ba91e6a65f35d282c..c942ccab8bca7d4f9488ebd1c88f4ad9b329e6ec 100644 (file)
@@ -624,20 +624,24 @@ static void e1000_get_drvinfo(struct net_device *netdev,
        struct e1000_adapter *adapter = netdev_priv(netdev);
        char firmware_version[32];
 
-       strncpy(drvinfo->driver,  e1000e_driver_name, 32);
-       strncpy(drvinfo->version, e1000e_driver_version, 32);
+       strncpy(drvinfo->driver,  e1000e_driver_name,
+               sizeof(drvinfo->driver) - 1);
+       strncpy(drvinfo->version, e1000e_driver_version,
+               sizeof(drvinfo->version) - 1);
 
        /*
         * EEPROM image version # is reported as firmware version # for
         * PCI-E controllers
         */
-       sprintf(firmware_version, "%d.%d-%d",
+       snprintf(firmware_version, sizeof(firmware_version), "%d.%d-%d",
                (adapter->eeprom_vers & 0xF000) >> 12,
                (adapter->eeprom_vers & 0x0FF0) >> 4,
                (adapter->eeprom_vers & 0x000F));
 
-       strncpy(drvinfo->fw_version, firmware_version, 32);
-       strncpy(drvinfo->bus_info, pci_name(adapter->pdev), 32);
+       strncpy(drvinfo->fw_version, firmware_version,
+               sizeof(drvinfo->fw_version) - 1);
+       strncpy(drvinfo->bus_info, pci_name(adapter->pdev),
+               sizeof(drvinfo->bus_info) - 1);
        drvinfo->regdump_len = e1000_get_regs_len(netdev);
        drvinfo->eedump_len = e1000_get_eeprom_len(netdev);
 }
index 5498689ac20c0a21dc1c055106a364bbe8b46459..98729a6fb0968bc958fdfd79fb77ca8a11737420 100644 (file)
@@ -5639,7 +5639,7 @@ static void e1000_print_device_info(struct e1000_adapter *adapter)
        ret_val = e1000_read_pba_string_generic(hw, pba_str,
                                                E1000_PBANUM_LENGTH);
        if (ret_val)
-               strcpy(pba_str, "Unknown");
+               strncpy((char *)pba_str, "Unknown", sizeof(pba_str) - 1);
        e_info("MAC: %d, PHY: %d, PBA No: %s\n",
               hw->mac.type, hw->phy.type, pba_str);
 }
@@ -5968,7 +5968,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev,
        if (!(adapter->flags & FLAG_HAS_AMT))
                e1000_get_hw_control(adapter);
 
-       strcpy(netdev->name, "eth%d");
+       strncpy(netdev->name, "eth%d", sizeof(netdev->name) - 1);
        err = register_netdev(netdev);
        if (err)
                goto err_register;