From c0fbf94bc5d667957df0eeffbfc001829179b332 Mon Sep 17 00:00:00 2001 From: Thomas Huth Date: Fri, 15 Jan 2016 18:36:35 +0100 Subject: net-snk: Fix memory leak in ip6_to_multicast_mac() / send_ipv6() ip6_to_multicast_mac() uses a malloc to allocate a 6 bytes buffer for the MAC address - which never gets freed again! That means we're leaking memory for every multicast IPv6 packet that gets send out. Fix it by simply using the "uint8_t mac[6]" array from send_ipv6() instead. Signed-off-by: Thomas Huth Signed-off-by: Alexey Kardashevskiy --- clients/net-snk/app/netlib/ipv6.c | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) (limited to 'clients') diff --git a/clients/net-snk/app/netlib/ipv6.c b/clients/net-snk/app/netlib/ipv6.c index 5b38ee0..3579dc9 100644 --- a/clients/net-snk/app/netlib/ipv6.c +++ b/clients/net-snk/app/netlib/ipv6.c @@ -419,17 +419,12 @@ ip6_is_multicast (ip6_addr_t * ip) * (e.g. UDP or ICMPv6) * * @param *ip - pointer to IPv6 address + * @param *mc_mac pointer to an array with 6 bytes (for the MAC address) * @return pointer to Multicast MAC address */ static uint8_t * -ip6_to_multicast_mac (ip6_addr_t * ip) +ip6_to_multicast_mac (ip6_addr_t * ip, uint8_t *mc_mac) { - uint8_t *mc_mac; - - mc_mac = malloc(ETH_ALEN); - if (!mc_mac) - return NULL; - mc_mac[0] = 0x33; mc_mac[1] = 0x33; memcpy (mc_mac+2, (uint8_t *) &(ip->addr)+12, 4); @@ -532,7 +527,7 @@ send_ipv6 (int fd, void* buffer, int len) // If address is a multicast address, create a proper mac address if (ip6_is_multicast (&ip_dst)) { - mac_addr = ip6_to_multicast_mac (&ip_dst); + mac_addr = ip6_to_multicast_mac (&ip_dst, mac); } else { // Check if the MAC address is already cached -- cgit v1.1