]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
DHCP: Don't leak the malloc of the truncated lease file
authorRoy Marples <roy@marples.name>
Wed, 4 Sep 2019 10:23:16 +0000 (11:23 +0100)
committerRoy Marples <roy@marples.name>
Wed, 4 Sep 2019 10:23:16 +0000 (11:23 +0100)
src/dhcp-common.c
src/dhcp.c
src/dhcp6.c

index 1f16f2cb72c73420ea634244cb67e3c76c495fac..dab20a2e92a2db0578bb08282643889b040ef130 100644 (file)
@@ -961,6 +961,8 @@ dhcp_read_lease_fd(int fd, void **lease)
        }
 
        sz = (size_t)st.st_size;
+       if (sz == 0)
+               goto out;
        if ((buf = malloc(sz)) == NULL)
                goto out;
        if ((len = read(fd, buf, sz)) == -1) {
index f5c5c094d2b7dbb035d7576652817dd310a3750f..eafd6e7aa49967f97d438ad8a98e19e156c5b48f 100644 (file)
@@ -1176,10 +1176,8 @@ read_lease(struct interface *ifp, struct bootp **bootp)
        bytes = dhcp_read_lease_fd(fd, (void **)&lease);
        if (fd_opened)
                close(fd);
-       if (bytes == 0) {
-               free(lease);
+       if (bytes == 0)
                return 0;
-       }
 
        /* Ensure the packet is at lease BOOTP sized
         * with a vendor area of 4 octets
index 81a40c77dfb6ec8f2ef59127b522a821f2f978c1..ebb86cc612ac9afcc63ae880b31b7137237a671d 100644 (file)
@@ -2488,7 +2488,6 @@ dhcp6_readlease(struct interface *ifp, int validate)
        struct dhcp6_state *state;
        struct stat st;
        int fd;
-       struct dhcp6_message *lease;
        time_t now;
        int retval;
        bool fd_opened;
@@ -2514,10 +2513,8 @@ dhcp6_readlease(struct interface *ifp, int validate)
        if (fd == -1)
                return -1;
        retval = -1;
-       lease = NULL;
        free(state->new);
-       state->new_len = dhcp_read_lease_fd(fd, (void **)&lease);
-       state->new = state->new_len != 0 ? lease : NULL;
+       state->new_len = dhcp_read_lease_fd(fd, (void **)&state->new);
        if (fd_opened)
                close(fd);