[arch-commits] Commit in dhcpcd/trunk (PKGBUILD udf_validation.patch)

Ronald van Haren ronald at archlinux.org
Fri Mar 6 08:39:28 UTC 2009


    Date: Friday, March 6, 2009 @ 03:39:27
  Author: ronald
Revision: 29166

upgpkg: dhcpcd 4.0.12-1

Added:
  dhcpcd/trunk/udf_validation.patch
Modified:
  dhcpcd/trunk/PKGBUILD

----------------------+
 PKGBUILD             |    9 ++--
 udf_validation.patch |   96 +++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 100 insertions(+), 5 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2009-03-06 08:02:20 UTC (rev 29165)
+++ PKGBUILD	2009-03-06 08:39:27 UTC (rev 29166)
@@ -4,7 +4,7 @@
 # Contributor: Judd Vinet <jvinet.zeroflux.org>
 
 pkgname=dhcpcd
-pkgver=4.0.10
+pkgver=4.0.12
 pkgrel=1
 pkgdesc="RFC2131 compliant DHCP client daemon"
 url="http://roy.marples.name/dhcpcd/"
@@ -15,15 +15,14 @@
 backup=('etc/conf.d/dhcpcd' 'etc/dhcpcd.conf')
 options=('emptydirs')  # We Need the Empty /var/lib/dhcpcd Directory
 source=("http://roy.marples.name/downloads/$pkgname/$pkgname-$pkgver.tar.bz2" \
-        'dhcpcd.conf.d')
-md5sums=('52d0e788743368034a4afff858117770'	'372d33485556982b64a97f301e17c5dd')
+        'dhcpcd.conf.d' 'udf_validation.patch')
 
 
 build() {
   cd ${srcdir}/${pkgname}-${pkgver}
 
-  # Disable DUID Usage
-  #echo "#undef ENABLE_DUID" >> config.h
+  # apply upstream patch, changeset 1248 (Backport UDP validation)
+  patch -Np1 -i ${srcdir}/udf_validation.patch || return 1
 
   # Fix Installation Locations
   export PREFIX=/usr

Added: udf_validation.patch
===================================================================
--- udf_validation.patch	                        (rev 0)
+++ udf_validation.patch	2009-03-06 08:39:27 UTC (rev 29166)
@@ -0,0 +1,96 @@
+diff -Naur dhcpcd-4.0.12.old/client.c dhcpcd-4.0.12/client.c
+--- dhcpcd-4.0.12.old/client.c	2009-03-06 09:31:21.077601089 +0100
++++ dhcpcd-4.0.12/client.c	2009-03-06 09:29:44.000000000 +0100
+@@ -1548,7 +1548,7 @@
+ 		}
+ 		if (bytes == -1)
+ 			break;
+-		if (valid_udp_packet(packet) == -1)
++		if (valid_udp_packet(packet, bytes) == -1)
+ 			continue;
+ 		bytes = get_udp_data(&pp, packet);
+ 		if ((size_t)bytes > sizeof(*dhcp)) {
+diff -Naur dhcpcd-4.0.12.old/net.c dhcpcd-4.0.12/net.c
+--- dhcpcd-4.0.12.old/net.c	2009-03-06 09:31:21.077601089 +0100
++++ dhcpcd-4.0.12/net.c	2009-03-06 09:29:44.000000000 +0100
+@@ -634,44 +634,42 @@
+ }
+ 
+ int
+-valid_udp_packet(const uint8_t *data)
++valid_udp_packet(const uint8_t *data, size_t data_len)
+ {
+ 	struct udp_dhcp_packet packet;
+-	uint16_t bytes;
+-	uint16_t ipsum;
+-	uint16_t iplen;
+-	uint16_t udpsum;
+-	struct in_addr source;
+-	struct in_addr dest;
+-	int retval = 0;
++	uint16_t bytes, udpsum;
+ 
+-	memcpy(&packet, data, sizeof(packet));
+-	bytes = ntohs(packet.ip.ip_len);
+-	ipsum = packet.ip.ip_sum;
+-	iplen = packet.ip.ip_len;
+-	udpsum = packet.udp.uh_sum;
+-
+-	if (0 != checksum(&packet.ip, sizeof(packet.ip))) {
++	if (data_len > sizeof(packet)) {
++		errno = EINVAL;
++		return -1;
++	}
++	memcpy(&packet, data, data_len);
++	if (checksum(&packet.ip, sizeof(packet.ip)) != 0) {
+ 		errno = EINVAL;
+ 		return -1;
+ 	}
+ 
+-	packet.ip.ip_sum = 0;
+-	memcpy(&source, &packet.ip.ip_src, sizeof(packet.ip.ip_src));
+-	memcpy(&dest, &packet.ip.ip_dst, sizeof(packet.ip.ip_dst));
+-	memset(&packet.ip, 0, sizeof(packet.ip));
++	bytes = ntohs(packet.ip.ip_len);
++	if (data_len < bytes) {
++		errno = EINVAL;
++		return -1;
++	}
++	udpsum = packet.udp.uh_sum;
+ 	packet.udp.uh_sum = 0;
+-
+-	packet.ip.ip_p = IPPROTO_UDP;
+-	memcpy(&packet.ip.ip_src, &source, sizeof(packet.ip.ip_src));
+-	memcpy(&packet.ip.ip_dst, &dest, sizeof(packet.ip.ip_dst));
++	packet.ip.ip_hl = 0;
++	packet.ip.ip_v = 0;
++	packet.ip.ip_tos = 0;
+ 	packet.ip.ip_len = packet.udp.uh_ulen;
+-	if (udpsum && udpsum != checksum(&packet, bytes)) {
++	packet.ip.ip_id = 0;
++	packet.ip.ip_off = 0;
++	packet.ip.ip_ttl = 0;
++	packet.ip.ip_sum = 0;
++	if (udpsum && checksum(&packet, bytes) != udpsum) {
+ 		errno = EINVAL;
+-		retval = -1;
++		return -1;
+ 	}
+ 
+-	return retval;
++	return 0;
+ }
+ 
+ int
+diff -Naur dhcpcd-4.0.12.old/net.h dhcpcd-4.0.12/net.h
+--- dhcpcd-4.0.12.old/net.h	2009-03-06 09:31:21.080934132 +0100
++++ dhcpcd-4.0.12/net.h	2009-03-06 09:29:44.000000000 +0100
+@@ -160,7 +160,7 @@
+ ssize_t make_udp_packet(uint8_t **, const uint8_t *, size_t,
+ 			struct in_addr, struct in_addr);
+ ssize_t get_udp_data(const uint8_t **, const uint8_t *);
+-int valid_udp_packet(const uint8_t *);
++int valid_udp_packet(const uint8_t *, size_t);
+ 
+ int open_socket(struct interface *, int);
+ ssize_t send_packet(const struct interface *, struct in_addr, 




More information about the arch-commits mailing list