diff -ru --new-file 2.3.40.clean/net/ipv4/ipconfig.c 2.3.40/net/ipv4/ipconfig.c
--- 2.3.40.clean/net/ipv4/ipconfig.c	Sun Jan  9 05:36:20 2000
+++ 2.3.40/net/ipv4/ipconfig.c	Sun Jan 23 01:07:11 2000
@@ -534,7 +534,14 @@
 
 	/* Construct BOOTP header */
 	b->op = BOOTP_REQUEST;
-	b->htype = dev->type;
+	if (dev->type < 256) /* check for false types */
+		b->htype = dev->type;
+	else if (dev->type == ARPHRD_IEEE802_TR) /* fix for token ring */
+		b->htype = ARPHRD_IEEE802;
+	else {
+		printk("Unknown ARP type 0x%04x for device %s\n", dev->type, dev->name);
+		b->htype = dev->type; /* can cause undefined behavior */
+	}
 	b->hlen = dev->addr_len;
 	memcpy(b->hw_addr, dev->dev_addr, dev->addr_len);
 	b->secs = htons(jiffies / HZ);
