]> git.ipfire.org Git - thirdparty/dhcp.git/commitdiff
- An option definition referencing leak was fixed, which resulted in early
authorDavid Hankins <dhankins@isc.org>
Tue, 17 Oct 2006 20:45:59 +0000 (20:45 +0000)
committerDavid Hankins <dhankins@isc.org>
Tue, 17 Oct 2006 20:45:59 +0000 (20:45 +0000)
  termination of dhclient upon the renewal event. [ISC-Bugs #16423]

RELNOTES
common/options.c
common/tree.c
server/dhcp.c

index 918a8c6d85e4020dbe1788ebe5dced6f6b697961..a2e42b6b0bf8552c88f2cb20b5393800ca2db98a 100644 (file)
--- a/RELNOTES
+++ b/RELNOTES
@@ -36,7 +36,10 @@ the README file.
 
 - UPDREQ/UPDREQALL handling was optimized - it no longer dequeues and
   requeues all pending updates.  This should reduce the number of spurious
-  'xid mismatch' log mesasges.
+  'xid mismatch' log messages.
+
+- An option definition referencing leak was fixed, which resulted in early
+  termination of dhclient upon the renewal event.
 
                        Changes since 3.0 (New Features)
 
index 3641936606c8d659d301ddc329f241dea09f42cc..c3a3fde2349696d6afa76b25c239edd79cbd4b88 100644 (file)
@@ -34,7 +34,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: options.c,v 1.99 2006/08/24 14:58:55 dhankins Exp $ Copyright (c) 2004-2006 Internet Systems Consortium.  All rights reserved.\n";
+"$Id: options.c,v 1.100 2006/10/17 20:45:59 dhankins Exp $ Copyright (c) 2004-2006 Internet Systems Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #define DHCP_OPTION_DATA
@@ -1689,7 +1689,7 @@ void set_option (universe, options, option, op)
                                break;
                        }
                }
-               noc -> option = oc -> option;
+               option_reference(&(noc->option), oc->option, MDL);
                save_option (universe, options, noc);
                option_cache_dereference (&noc, MDL);
                break;
@@ -2992,7 +2992,7 @@ add_option(struct option_state *options,
                return 0;
        }
 
-       oc->option = option;
+       option_reference(&(oc->option), option, MDL);
        save_option(&dhcp_universe, options, oc);
        option_cache_dereference(&oc, MDL);
 
index 9c316f75b25c0470603200ac01800f1078b6d259..d5bf7ded9e7d09d60b2ebaa64413b59c2b1b7b00 100644 (file)
@@ -34,7 +34,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: tree.c,v 1.108 2006/07/31 22:19:51 dhankins Exp $ Copyright (c) 2004-2006 Internet Systems Consortium.  All rights reserved.\n";
+"$Id: tree.c,v 1.109 2006/10/17 20:45:59 dhankins Exp $ Copyright (c) 2004-2006 Internet Systems Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -242,7 +242,7 @@ int make_const_option_cache (oc, buffer, data, len, option, file, line)
        (*oc) -> data.terminated = 0;
        if (data)
                memcpy (&bp -> data [0], data, len);
-       (*oc) -> option = option;
+       option_reference(&((*oc)->option), option, MDL);
        return 1;
 }
 
index 4263781d0c6c29c173493049c45bf8cbef44ba81..288dc965d0c20b1d09d54f76462c8d611326ef3f 100644 (file)
@@ -34,7 +34,7 @@
 
 #ifndef lint
 static char copyright[] =
-"$Id: dhcp.c,v 1.212 2006/08/22 17:13:25 dhankins Exp $ Copyright (c) 2004-2006 Internet Systems Consortium.  All rights reserved.\n";
+"$Id: dhcp.c,v 1.213 2006/10/17 20:45:59 dhankins Exp $ Copyright (c) 2004-2006 Internet Systems Consortium.  All rights reserved.\n";
 #endif /* not lint */
 
 #include "dhcpd.h"
@@ -2426,7 +2426,8 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
                                expression_reference (&noc -> expression,
                                                      oc -> expression, MDL);
                        if (oc -> option)
-                               noc -> option = oc -> option;
+                               option_reference(&(noc->option), oc->option,
+                                                MDL);
                }
 
                save_option (&dhcp_universe, state -> options, noc);