[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