[klibc] [PATCH] ipconfig truncates dhcp response

Olaf Hering olh at suse.de
Thu Sep 2 13:43:15 PDT 2004


We get 3 dns servers in our network. ipconfig will take only the first
2. It doesnt advance the pointer correctly, As a result, the following
entries in the reply will be parsed incorrectly.

len must not change.



diff -p -purN klibc-0.171.orig/ipconfig/bootp_proto.c klibc-0.171/ipconfig/bootp_proto.c
--- klibc-0.171.orig/ipconfig/bootp_proto.c	2004-06-16 20:30:05.000000000 +0200
+++ klibc-0.171/ipconfig/bootp_proto.c	2004-09-02 12:38:19.000000000 +0200
@@ -89,19 +89,13 @@ bootp_parse(struct netdev *dev, struct b
 
 			switch (opt) {
 			case 1:	/* subnet mask */
-				if (len > 4)
-					len = 4;
-				memcpy(&dev->ip_netmask, ext, len);
+				memcpy(&dev->ip_netmask, ext, len > 4 ? 4 : len);
 				break;
 			case 3: /* default gateway */
-				if (len > 4)
-					len = 4;
-				memcpy(&dev->ip_gateway, ext, len);
+				memcpy(&dev->ip_gateway, ext, len > 4 ? 4 : len);
 				break;
 			case 6:	/* DNS server */
-				if (len > 8)
-					len = 8;
-				memcpy(&dev->ip_nameserver, ext, len);
+				memcpy(&dev->ip_nameserver, ext, len > 8 ? 8 : len);
 				break;
 			case 12: /* host name */
 				if (len > sizeof(dev->hostname) - 1)
@@ -126,9 +120,7 @@ bootp_parse(struct netdev *dev, struct b
 					dev->mtu = (ext[0] << 8) + ext[1];
 				break;
 			case 28: /* broadcast addr */
-				if (len > 4)
-					len = 4;
-				memcpy(&dev->ip_broadcast, ext, len);
+				memcpy(&dev->ip_broadcast, ext, len > 4 ? 4 : len);
 				break;
 			case 40: /* NIS domain name */
 				if (len > sizeof(dev->nisdomainname) - 1)

-- 
USB is for mice, FireWire is for men!

sUse lINUX ag, nÜRNBERG



More information about the klibc mailing list