]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Fix some memory issues.
authorRoy Marples <roy@marples.name>
Fri, 6 May 2016 16:28:54 +0000 (16:28 +0000)
committerRoy Marples <roy@marples.name>
Fri, 6 May 2016 16:28:54 +0000 (16:28 +0000)
common.c
duid.c

index abd15f880df29a8c9a16b48ee257d32bb6585e16..8c6060c6b32b98352a825dcb3ff3bccb56293b77 100644 (file)
--- a/common.c
+++ b/common.c
@@ -361,12 +361,13 @@ read_hwaddr_aton(uint8_t **data, const char *path)
                        if (buf_len >= len)
                                *data = (uint8_t *)buf;
                        else {
-                               free(buf);
                                if ((*data = malloc(len)) == NULL)
                                        len = 0;
                        }
                        if (len != 0)
-                               len = hwaddr_aton(*data, buf);
+                               (void)hwaddr_aton(*data, buf);
+                       if (buf_len < len)
+                               free(buf);
                        break;
                }
        }
diff --git a/duid.c b/duid.c
index 156742adda1ac509f577fbd644a77e2ca03ffe90..9105fb0189304d5f32211acdf956a61cdaaf50b6 100644 (file)
--- a/duid.c
+++ b/duid.c
@@ -113,6 +113,9 @@ duid_get(uint8_t **d, const struct interface *ifp)
                }
        }
 
+       /* Regardless of what happens we will create a DUID to use. */
+       *d = data;
+
        /* No file? OK, lets make one based on our interface */
        if (ifp->family == ARPHRD_NETROM) {
                logger(ifp->ctx, LOG_WARNING,
@@ -133,7 +136,6 @@ duid_get(uint8_t **d, const struct interface *ifp)
                }
        }
 
-       *d = data;
        if (!(fp = fopen(DUID, "w"))) {
                logger(ifp->ctx, LOG_ERR, "error writing DUID: %s: %m", DUID);
                return duid_make(data, ifp, DUID_LL);