summaryrefslogtreecommitdiff
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/confpars.c10
-rw-r--r--server/ddns.c5
-rw-r--r--server/dhcp.c3
-rw-r--r--server/mdb6.c2
4 files changed, 17 insertions, 3 deletions
diff --git a/server/confpars.c b/server/confpars.c
index 99fb9a6d..b50d5072 100644
--- a/server/confpars.c
+++ b/server/confpars.c
@@ -775,8 +775,11 @@ int parse_statement (cfile, group, type, host_decl, declaration)
et = (struct executable_statement *)0;
if (!parse_option_statement
(&et, cfile, 1, option,
- supersede_option_statement))
+ supersede_option_statement)) {
+ option_dereference(&option, MDL);
return declaration;
+ }
+
option_dereference(&option, MDL);
goto insert_statement;
} else
@@ -2795,6 +2798,7 @@ void parse_subnet_declaration (cfile, share)
if (token != NETMASK) {
parse_warn (cfile, "Expecting netmask");
skip_to_semi (cfile);
+ subnet_dereference (&subnet, MDL);
return;
}
@@ -2898,6 +2902,7 @@ parse_subnet6_declaration(struct parse *cfile, struct shared_network *share) {
token = next_token(&val, NULL, cfile);
if (token != SLASH) {
parse_warn(cfile, "Expecting a '/'.");
+ subnet_dereference(&subnet, MDL);
skip_to_semi(cfile);
return;
}
@@ -2905,6 +2910,7 @@ parse_subnet6_declaration(struct parse *cfile, struct shared_network *share) {
token = next_token(&val, NULL, cfile);
if (token != NUMBER) {
parse_warn(cfile, "Expecting a number.");
+ subnet_dereference(&subnet, MDL);
skip_to_semi(cfile);
return;
}
@@ -2914,12 +2920,14 @@ parse_subnet6_declaration(struct parse *cfile, struct shared_network *share) {
(subnet->prefix_len > 128) ||
(*endp != '\0')) {
parse_warn(cfile, "Expecting a number between 0 and 128.");
+ subnet_dereference(&subnet, MDL);
skip_to_semi(cfile);
return;
}
if (!is_cidr_mask_valid(&subnet->net, subnet->prefix_len)) {
parse_warn(cfile, "New subnet mask too short.");
+ subnet_dereference(&subnet, MDL);
skip_to_semi(cfile);
return;
}
diff --git a/server/ddns.c b/server/ddns.c
index 1bd72f6b..aecc3d38 100644
--- a/server/ddns.c
+++ b/server/ddns.c
@@ -1285,9 +1285,10 @@ ddns_update_lease_ptr(struct lease *lease,
file, line);
#endif
/*
- * never reached. update_lease_failed
- * calls log_fatal.
+ * not reached when update_lease_failed is called,
+ * it calls log_fatal.
*/
+ ipv6_pool_dereference(&pool, MDL);
return(ISC_R_FAILURE);
}
ipv6_pool_dereference(&pool, MDL);
diff --git a/server/dhcp.c b/server/dhcp.c
index 6d129ec9..0b6e2326 100644
--- a/server/dhcp.c
+++ b/server/dhcp.c
@@ -1193,6 +1193,7 @@ void dhcpinform (packet, ms_nulltp)
if (d1.len != 4) {
log_info("%s: ignored (invalid subnet selection option).", msgbuf);
option_state_dereference(&options, MDL);
+ data_string_forget(&d1, MDL);
return;
}
@@ -1574,6 +1575,7 @@ void dhcpinform (packet, ms_nulltp)
option_state_dereference (&options, MDL);
if (subnet)
subnet_dereference (&subnet, MDL);
+ data_string_forget (&d1, MDL);
return;
}
@@ -3526,6 +3528,7 @@ void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
(const char *)d1.data, d1.len,
MDL)) {
log_error ("unknown option space %s.", d1.data);
+ data_string_forget (&d1, MDL);
return;
}
diff --git a/server/mdb6.c b/server/mdb6.c
index 4afb3928..da7baf6e 100644
--- a/server/mdb6.c
+++ b/server/mdb6.c
@@ -1085,9 +1085,11 @@ create_lease6(struct ipv6_pool *pool, struct iasubopt **addr,
case D6O_IA_PD:
/* prefix */
log_error("create_lease6: prefix pool.");
+ data_string_forget(&ds, MDL);
return DHCP_R_INVALIDARG;
default:
log_error("create_lease6: untyped pool.");
+ data_string_forget(&ds, MDL);
return DHCP_R_INVALIDARG;
}