From: Roy Marples Date: Sun, 29 Jul 2007 10:18:52 +0000 (+0000) Subject: Don't free the dhcp object on RENEW (fixes a segfault) X-Git-Tag: v3.2.3~226 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a9a3974b6cf38f7943a02e748deb132bf9760364;p=thirdparty%2Fdhcpcd.git Don't free the dhcp object on RENEW (fixes a segfault) --- diff --git a/ChangeLog b/ChangeLog index 863b64a9..6fd2cc62 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,5 @@ +Don't free the dhcp object on RENEW (fixes a segfault) + dhcpcd-3.1.1 Fix segfault in arp code that some users had. Remove getifaddrs code and instead just use ioctls so we don't break diff --git a/client.c b/client.c index 4d55e6c5..b7c92bca 100644 --- a/client.c +++ b/client.c @@ -502,7 +502,6 @@ int dhcp_run (const options_t *options, int *pidfd) xid = random (); case STATE_RENEWING: iface->start_uptime = uptime (); - free_dhcp (dhcp); logger (LOG_INFO, "renewing lease of %s", inet_ntoa (dhcp->address)); SOCKET_MODE (SOCKET_OPEN); diff --git a/dhcp.c b/dhcp.c index 02db748b..268ad5d3 100644 --- a/dhcp.c +++ b/dhcp.c @@ -374,16 +374,7 @@ static route_t *decode_CSR(const unsigned char *p, int len) memset (route, 0, sizeof (route_t)); cidr = *q++; - if (cidr == 0) - ocets = 0; - else if (cidr < 9) - ocets = 1; - else if (cidr < 17) - ocets = 2; - else if (cidr < 25) - ocets = 3; - else - ocets = 4; + ocets = (cidr + 7) / 8; if (ocets > 0) { memcpy (&route->destination.s_addr, q, ocets);