diff --git a/net/wireless/core.c b/net/wireless/core.c
index 7b66cf15349a6c7c57e61decaa56be50af5ce650..83ec7197bd7ce5668880d438af2da751c51d1483 100644
--- a/net/wireless/core.c
+++ b/net/wireless/core.c
@@ -567,9 +567,6 @@ static int cfg80211_netdev_notifier_call(struct notifier_block * nb,
 #endif
 		break;
 	case NETDEV_GOING_DOWN:
-		if (!wdev->ssid_len)
-			break;
-
 		switch (wdev->iftype) {
 		case NL80211_IFTYPE_ADHOC:
 			cfg80211_leave_ibss(rdev, dev, true);
diff --git a/net/wireless/ibss.c b/net/wireless/ibss.c
index c92b542d54b0435a6371e6a2f9e6ae5e41344868..a5330c5a54777c25d026ee9f3e84de89c3425824 100644
--- a/net/wireless/ibss.c
+++ b/net/wireless/ibss.c
@@ -92,8 +92,12 @@ void cfg80211_clear_ibss(struct net_device *dev, bool nowext)
 int cfg80211_leave_ibss(struct cfg80211_registered_device *rdev,
 			struct net_device *dev, bool nowext)
 {
+	struct wireless_dev *wdev = dev->ieee80211_ptr;
 	int err;
 
+	if (!wdev->ssid_len)
+		return -ENOLINK;
+
 	err = rdev->ops->leave_ibss(&rdev->wiphy, dev);
 
 	if (err)