diff --git a/src/monitor.c b/src/monitor.c index 10d406b..54a6d04 100644 --- a/src/monitor.c +++ b/src/monitor.c @@ -50,6 +50,9 @@ static void nl80211_cleanup(void) { } } +// Forward declaration +static int verify_monitor_mode(const char *interface); + // Helper function to bring interface up/down using ioctl static int set_interface_up(const char *interface, int up) { int sockfd; @@ -300,7 +303,7 @@ static int get_interface_type_cb(struct nl_msg *msg, void *arg) { // Verify interface is in monitor mode static int verify_monitor_mode(const char *interface) { struct nl_msg *msg; - struct nl_cb *cb; + struct nl_cb *cb = NULL; int ifindex; int err = 0; uint32_t iftype = 0; @@ -351,6 +354,14 @@ static int verify_monitor_mode(const char *interface) { nl80211_cleanup(); return (iftype == NL80211_IFTYPE_MONITOR) ? 0 : -1; + +nla_put_failure: + if (cb) { + nl_cb_put(cb); + } + nlmsg_free(msg); + nl80211_cleanup(); + return -1; } // Get current channel from interface using netlink