summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/odhcpd.c1
-rw-r--r--src/router.c3
2 files changed, 3 insertions, 1 deletions
diff --git a/src/odhcpd.c b/src/odhcpd.c
index 6070bfb..acedaec 100644
--- a/src/odhcpd.c
+++ b/src/odhcpd.c
@@ -131,6 +131,7 @@ int odhcpd_get_interface_mtu(const char *ifname)
int odhcpd_get_mac(const struct interface *iface, uint8_t mac[6])
{
struct ifreq ifr;
+ memset(&ifr, 0, sizeof(ifr));
strncpy(ifr.ifr_name, iface->ifname, sizeof(ifr.ifr_name));
if (ioctl(ioctl_sock, SIOCGIFHWADDR, &ifr) < 0)
return -1;
diff --git a/src/router.c b/src/router.c
index 9258acf..bb7ddcd 100644
--- a/src/router.c
+++ b/src/router.c
@@ -352,7 +352,7 @@ static void send_router_advert(struct uloop_timeout *event)
uint8_t pad2;
uint32_t lifetime;
uint8_t name[];
- } *search = alloca(sizeof(*search) + search_padded);
+ } *search = malloc(sizeof(*search) + search_padded);
search->type = ND_OPT_DNS_SEARCH;
search->len = search_len ? ((sizeof(*search) + search_padded) / 8) : 0;
search->pad = 0;
@@ -409,6 +409,7 @@ static void send_router_advert(struct uloop_timeout *event)
struct sockaddr_in6 all_nodes = {AF_INET6, 0, 0, ALL_IPV6_NODES, 0};
odhcpd_send(router_event.uloop.fd,
&all_nodes, iov, ARRAY_SIZE(iov), iface);
+ free(search);
// Rearm timer
int msecs;