ports/97681: [maintainer-update] net/isc-dhcp3-server: better fix for time_t size problem on *64 ARCHS
Joerg Pulz
Joerg.Pulz at frm2.tum.de
Tue May 23 08:50:25 UTC 2006
>Number: 97681
>Category: ports
>Synopsis: [maintainer-update] net/isc-dhcp3-server: better fix for time_t size problem on *64 ARCHS
>Confidential: no
>Severity: critical
>Priority: high
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: maintainer-update
>Submitter-Id: current-users
>Arrival-Date: Tue May 23 08:50:19 GMT 2006
>Closed-Date:
>Last-Modified:
>Originator: Joerg Pulz
>Release: FreeBSD 6.1-PRERELEASE i386
>Organization:
TU-Munich / ZWE FRM-II
>Environment:
System: FreeBSD hades.admin.frm2 6.1-PRERELEASE FreeBSD 6.1-PRERELEASE #11: Wed Feb 22 19:01:44 CET 2006 root at hades.admin.frm2:/usr/obj/usr/src/sys/HADES i386
>Description:
Fix the time_t problem on *64 ARCHS without introducing a possible
security risk by writing 8 bytes to a 4 byte declared variable.
My first fix was really a ugly quick hack as some reallife tasks took
slightly longer than i thought.
I'm really sorry for all this trouble.
Many thanks to Dan Lukes <dan_at_obluda.cz> for pointing this out and
providing the patch.
Tested on: RELENG_6_1 amd64, sparc64 with Windows XP client
>How-To-Repeat:
>Fix:
- apply the patch
- add files/patch-server::dhcp.c to CVS
--- net_isc-dhcp3-server.diff begins here ---
Index: Makefile
===================================================================
RCS file: /home/ncvs/ports/net/isc-dhcp3-server/Makefile,v
retrieving revision 1.115
diff -u -r1.115 Makefile
--- Makefile 21 May 2006 18:05:39 -0000 1.115
+++ Makefile 23 May 2006 08:25:22 -0000
@@ -8,7 +8,7 @@
PORTNAME= dhcp
PORTVERSION= 3.0.4
-PORTREVISION= 1
+PORTREVISION= 2
CATEGORIES= net
MASTER_SITES= ${MASTER_SITE_ISC}
MASTER_SITE_SUBDIR= dhcp dhcp/dhcp-3.0-history
@@ -40,10 +40,6 @@
.include <bsd.port.pre.mk>
-.if ${ARCH} == "amd64" || ${ARCH} == "ia64" || ${ARCH} == "sparc64"
-FORBIDDEN= the last fix for 64-bit platforms may cause security problems
-.endif
-
.if ${SUBSYS} == server && defined(WITH_DHCP_LDAP)
# Based on patch from Brian Masney :
PATCH_SITES= http://www.newwave.net/~masneyb/:ldap \
Index: files/patch-includes::cf::freebsd.h
===================================================================
RCS file: /home/ncvs/ports/net/isc-dhcp3-server/files/patch-includes::cf::freebsd.h,v
retrieving revision 1.3
diff -u -r1.3 patch-includes::cf::freebsd.h
--- files/patch-includes::cf::freebsd.h 16 May 2006 06:20:52 -0000 1.3
+++ files/patch-includes::cf::freebsd.h 23 May 2006 08:25:22 -0000
@@ -9,15 +9,6 @@
#include <string.h>
#include <paths.h>
#include <errno.h>
-@@ -82,7 +82,7 @@
-
- /* Time stuff... */
- #include <sys/time.h>
--#define TIME time_t
-+#define TIME u_int32_t
- #define GET_TIME(x) time ((x))
-
- #define HAVE_SA_LEN
@@ -97,6 +97,10 @@
#define SOCKLEN_T int
#endif
Index: files/patch-server::dhcp.c
===================================================================
RCS file: files/patch-server::dhcp.c
diff -N files/patch-server::dhcp.c
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ files/patch-server::dhcp.c 23 May 2006 08:25:22 -0000
@@ -0,0 +1,53 @@
+--- server/dhcp.c.orig Wed Feb 22 23:43:27 2006
++++ server/dhcp.c Mon May 22 01:39:59 2006
+@@ -2442,6 +2442,7 @@
+ offered_lease_time =
+ state -> offered_expiry - cur_time;
+
++ state -> expiry = 0;
+ putULong ((unsigned char *)&state -> expiry,
+ (unsigned long)offered_lease_time);
+ i = DHO_DHCP_LEASE_TIME;
+@@ -2452,7 +2453,7 @@
+ if (option_cache_allocate (&oc, MDL)) {
+ if (make_const_data (&oc -> expression,
+ (unsigned char *)&state -> expiry,
+- sizeof state -> expiry,
++ 4,
+ 0, 0, MDL)) {
+ oc -> option = dhcp_universe.options [i];
+ save_option (&dhcp_universe,
+@@ -2463,6 +2464,7 @@
+
+ /* Renewal time is lease time * 0.5. */
+ offered_lease_time /= 2;
++ state -> renewal = 0;
+ putULong ((unsigned char *)&state -> renewal,
+ (unsigned long)offered_lease_time);
+ i = DHO_DHCP_RENEWAL_TIME;
+@@ -2474,7 +2476,7 @@
+ if (make_const_data (&oc -> expression,
+ (unsigned char *)
+ &state -> renewal,
+- sizeof state -> renewal,
++ 4,
+ 0, 0, MDL)) {
+ oc -> option = dhcp_universe.options [i];
+ save_option (&dhcp_universe,
+@@ -2486,6 +2488,7 @@
+ /* Rebinding time is lease time * 0.875. */
+ offered_lease_time += (offered_lease_time / 2
+ + offered_lease_time / 4);
++ state -> rebind = 0;
+ putULong ((unsigned char *)&state -> rebind,
+ (unsigned)offered_lease_time);
+ i = DHO_DHCP_REBINDING_TIME;
+@@ -2496,7 +2499,7 @@
+ if (option_cache_allocate (&oc, MDL)) {
+ if (make_const_data (&oc -> expression,
+ (unsigned char *)&state -> rebind,
+- sizeof state -> rebind,
++ 4,
+ 0, 0, MDL)) {
+ oc -> option = dhcp_universe.options [i];
+ save_option (&dhcp_universe,
--- net_isc-dhcp3-server.diff ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list