A patch for acenic

H.J. Lu (hjl@valinux.com)
Wed, 3 Nov 1999 14:37:34 -0800 (PST)


Hi,

There is a bug in the acenic driver. The "name" field is too small.
It causes the memory overrun. This patch seems to fix the problem.

-- 
H.J. Lu (hjl@gnu.org)
--
--- linux/drivers/net/acenic.h.orig	Wed Nov  3 13:00:22 1999
+++ linux/drivers/net/acenic.h	Wed Nov  3 13:02:34 1999
@@ -647,7 +647,7 @@ struct ace_private
 	u8			pci_bus;
 	u8			pci_dev_fun;
 #endif
-	char			name[24];
+	char			name[48];
 	struct net_device_stats stats;
 };
 
--- linux/drivers/net/acenic.c.orig	Wed Nov  3 13:02:40 1999
+++ linux/drivers/net/acenic.c	Wed Nov  3 13:12:21 1999
@@ -289,34 +289,39 @@ __initfunc(int acenic_probe (struct devi
 
 		switch(ap->vendor){
 		case PCI_VENDOR_ID_ALTEON:
-			sprintf(ap->name, "AceNIC Gigabit Ethernet");
+			strncpy(ap->name, "AceNIC Gigabit Ethernet", sizeof (ap->name));
 			printk(KERN_INFO "%s: Alteon AceNIC ", dev->name);
 			break;
 		case PCI_VENDOR_ID_3COM:
-			sprintf(ap->name, "3Com 3C985 Gigabit Ethernet");
+			strncpy(ap->name, "3Com 3C985 Gigabit Ethernet",
+				sizeof (ap->name));
 			printk(KERN_INFO "%s: 3Com 3C985 ", dev->name);
 			break;
 		case PCI_VENDOR_ID_NETGEAR:
-			sprintf(ap->name, "NetGear GA620 Gigabit Ethernet");
+			strncpy(ap->name, "NetGear GA620 Gigabit Ethernet",
+				sizeof (ap->name));
 			printk(KERN_INFO "%s: NetGear GA620 ", dev->name);
 			break;
 		case PCI_VENDOR_ID_DEC:
 			if (pdev->device == PCI_DEVICE_ID_FARALLON_PN9000SX) {
-				sprintf(ap->name, "Farallon PN9000-SX "
-					"Gigabit Ethernet");
+				strncpy(ap->name, "Farallon PN9000-SX Gigabit Ethernet",
+					sizeof (ap->name));
 				printk(KERN_INFO "%s: Farallon PN9000-SX ",
 				       dev->name);
 				break;
 			}
 		case PCI_VENDOR_ID_SGI:
-			sprintf(ap->name, "SGI AceNIC Gigabit Ethernet");
+			strncpy(ap->name, "SGI AceNIC Gigabit Ethernet",
+				sizeof (ap->name));
 			printk(KERN_INFO "%s: SGI AceNIC ", dev->name);
 			break;
 		default:
-			sprintf(ap->name, "Unknown AceNIC based Gigabit Ethernet");
+			strncpy(ap->name, "Unknown AceNIC based Gigabit Ethernet",
+				sizeof (ap->name));
 			printk(KERN_INFO "%s: Unknown AceNIC ", dev->name);
 			break;
 		}
+		ap->name [sizeof (ap->name) - 1] = '\0';
 		printk("Gigabit Ethernet at 0x%08lx, irq %i, PCI latency %i "
 		       "clks\n", pdev->base_address[0], dev->irq, pci_latency);
 

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/