]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Don't free the dhcp object on RENEW (fixes a segfault)
authorRoy Marples <roy@marples.name>
Sun, 29 Jul 2007 10:18:52 +0000 (10:18 +0000)
committerRoy Marples <roy@marples.name>
Sun, 29 Jul 2007 10:18:52 +0000 (10:18 +0000)
ChangeLog
client.c
dhcp.c

index 863b64a9c6e63c3a73698ffaa80100e8e4cf6b58..6fd2cc62993f20f003c80cb8789b5eb4c90203e9 100644 (file)
--- 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
index 4d55e6c54afb007b5d4742e379113f4a629af706..b7c92bca96efa5b35d37ea43c32bb18e96d4208b 100644 (file)
--- 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 02db748b1a033418dd9b31f889dcd08838f5a0fd..268ad5d3345fe550b2f2b578b9e1bc451ba4cc29 100644 (file)
--- 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);