diff options
Diffstat (limited to 'networking/udhcp')
-rw-r--r-- | networking/udhcp/ChangeLog | 7 | ||||
-rw-r--r-- | networking/udhcp/dhcpd.c | 11 | ||||
-rw-r--r-- | networking/udhcp/options.c | 4 |
3 files changed, 19 insertions, 3 deletions
diff --git a/networking/udhcp/ChangeLog b/networking/udhcp/ChangeLog index 34cfe16f9..13818953b 100644 --- a/networking/udhcp/ChangeLog +++ b/networking/udhcp/ChangeLog @@ -1,3 +1,10 @@ +0.9.9 (pending) ++ Added sanity check for max_leases (udhcp bug #1285) (me) ++ Finally got rid of the trailing space in enviromental vars (me) ++ added an new enviromental variable: $mask. It contains the number + of subnet bits for tools like ip route that require it. + (Bastian Blank <waldi@debian.org>, me) + 0.9.8 (021031) + split up README files (me) + use /dev/urandom to seed xid's (instead of time(0)) (me) diff --git a/networking/udhcp/dhcpd.c b/networking/udhcp/dhcpd.c index 6c16dfeb0..56ddaa942 100644 --- a/networking/udhcp/dhcpd.c +++ b/networking/udhcp/dhcpd.c @@ -95,6 +95,7 @@ int main(int argc, char *argv[]) int pid_fd; int max_sock; int sig; + unsigned long num_ips; OPEN_LOG("udhcpd"); LOG(LOG_INFO, "udhcp server (v%s) started", VERSION); @@ -114,7 +115,15 @@ int main(int argc, char *argv[]) } else server_config.lease = LEASE_TIME; - leases = malloc(sizeof(struct dhcpOfferedAddr) * server_config.max_leases); + /* Sanity check */ + num_ips = ntohl(server_config.end) - ntohl(server_config.start); + if (server_config.max_leases > num_ips) { + LOG(LOG_ERR, "max_leases value (%lu) not sane, setting to %lu instead", + server_config.max_leases, num_ips); + server_config.max_leases = num_ips; + } + + leases = xmalloc(sizeof(struct dhcpOfferedAddr) * server_config.max_leases); memset(leases, 0, sizeof(struct dhcpOfferedAddr) * server_config.max_leases); read_leases(server_config.lease_file); diff --git a/networking/udhcp/options.c b/networking/udhcp/options.c index 58144728e..9f95c1558 100644 --- a/networking/udhcp/options.c +++ b/networking/udhcp/options.c @@ -214,8 +214,8 @@ void attach_option(struct option_set **opt_list, struct dhcp_option *option, cha DEBUG(LOG_INFO, "Attaching option %s to list", option->name); /* make a new option */ - new = malloc(sizeof(struct option_set)); - new->data = malloc(length + 2); + new = xmalloc(sizeof(struct option_set)); + new->data = xmalloc(length + 2); new->data[OPT_CODE] = option->code; new->data[OPT_LEN] = length; memcpy(new->data + 2, buffer, length); |