From 2c45158ee8f6a147ec596135078f4c96859251c0 Mon Sep 17 00:00:00 2001 From: localhorst Date: Tue, 9 Dec 2025 21:47:20 +0100 Subject: [PATCH] Unchecked ioctl Return Value --- include/logger/logger.h | 4 ++++ src/logger/logger.cpp | 46 +++++++++++++++++++++++++++++------------ 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/include/logger/logger.h b/include/logger/logger.h index 8f883e2..0bbfc8c 100644 --- a/include/logger/logger.h +++ b/include/logger/logger.h @@ -16,6 +16,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include diff --git a/src/logger/logger.cpp b/src/logger/logger.cpp index 49a727f..75a06e4 100644 --- a/src/logger/logger.cpp +++ b/src/logger/logger.cpp @@ -143,24 +143,44 @@ string Logger::getTimestamp() * \param void * \return string MAC address (formatted) */ -string Logger::getMacAddress() +std::string Logger::getMacAddress() { - struct ifreq ifr; - int s = socket(AF_INET, SOCK_STREAM, 0); + struct ifaddrs *ifaddr, *ifa; - strcpy(ifr.ifr_name, "eth0"); - if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) + // default MAC if none found + std::string result = "00:00:00:00:00:00"; + + if (getifaddrs(&ifaddr) == -1) + return result; + + for (ifa = ifaddr; ifa != nullptr; ifa = ifa->ifa_next) { - strcpy(ifr.ifr_name, "eno1"); + if (!ifa->ifa_addr) + continue; + + // We want AF_PACKET interfaces (Ethernet) + if (ifa->ifa_addr->sa_family == AF_PACKET && + !(ifa->ifa_flags & IFF_LOOPBACK) && // skip loopback interface + (ifa->ifa_flags & IFF_UP)) // must be up + { + struct sockaddr_ll *s = (struct sockaddr_ll *)ifa->ifa_addr; + + if (s->sll_halen == 6) + { + char buf[32]; + snprintf(buf, sizeof(buf), + "%02X:%02X:%02X:%02X:%02X:%02X", + s->sll_addr[0], s->sll_addr[1], s->sll_addr[2], + s->sll_addr[3], s->sll_addr[4], s->sll_addr[5]); + + freeifaddrs(ifaddr); + return std::string(buf); + } + } } - unsigned char *hwaddr = (unsigned char *)ifr.ifr_hwaddr.sa_data; - char buffer[80]; - snprintf(buffer, sizeof(buffer), "%02X:%02X:%02X:%02X:%02X:%02X", hwaddr[0], hwaddr[1], hwaddr[2], - hwaddr[3], hwaddr[4], hwaddr[5]); - close(s); - string tmp = buffer; - return tmp; + freeifaddrs(ifaddr); + return result; } /**