diff --git a/src/i1905_netlink.c b/src/i1905_netlink.c index e7ac37678f423206cb8e4254559222c47518e51e..125685582fd605277cdc22e4b655a621c433ced1 100644 --- a/src/i1905_netlink.c +++ b/src/i1905_netlink.c @@ -646,8 +646,8 @@ int i1905_get_known_neighbors(struct i1905_private *priv, char *ifname) for (i = 0; i < num; i++) { if (rtnl_neigh_get_ifindex(neigh) == ifindex) { - struct nl_addr *lladdr; - struct nl_addr *ipaddr; + struct nl_addr *lladdr = NULL; + struct nl_addr *ipaddr = NULL; struct ip_address ip = {0}; uint8_t hwaddr[6] = {0}; uint16_t state; @@ -657,7 +657,7 @@ int i1905_get_known_neighbors(struct i1905_private *priv, char *ifname) state = rtnl_neigh_get_state(neigh); lladdr = rtnl_neigh_get_lladdr(neigh); - if (lladdr) + if (lladdr && nl_addr_get_len(lladdr) == 6) memcpy(hwaddr, nl_addr_get_binary_addr(lladdr), nl_addr_get_len(lladdr)); diff --git a/src/i1905_wifi.c b/src/i1905_wifi.c index 07440e9d366722469075a500f47ff25fe66d253e..128ec88f7bfb39e064ac4e6b2c80d5c3192bfaa6 100644 --- a/src/i1905_wifi.c +++ b/src/i1905_wifi.c @@ -62,7 +62,9 @@ int is_wifi_interface(const char *ifname) memset(&s, 0, sizeof(struct stat)); snprintf(path, 512, "/sys/class/net/%s/phy80211", ifname); - realpath(path, rpath); + if (!realpath(path, rpath)) + return 0; + if (lstat(rpath, &s) != -1) { if (S_ISDIR(s.st_mode)) { return 1;