diff --git a/net/mac80211/ibss.c b/net/mac80211/ibss.c index a7ac53a2f00d..c83e93f1bc45 100644 --- a/net/mac80211/ibss.c +++ b/net/mac80211/ibss.c @@ -1731,6 +1731,7 @@ void ieee80211_ibss_setup_sdata(struct ieee80211_sub_if_data *sdata) { struct ieee80211_if_ibss *ifibss = &sdata->u.ibss; + pr_info("DC %s: timer_setup: %p\n", __func__, &ifibss->timer); timer_setup(&ifibss->timer, ieee80211_ibss_timer, 0); INIT_LIST_HEAD(&ifibss->incomplete_stations); spin_lock_init(&ifibss->incomplete_lock); @@ -1886,6 +1887,7 @@ int ieee80211_ibss_leave(struct ieee80211_sub_if_data *sdata) skb_queue_purge(&sdata->skb_queue); del_timer_sync(&sdata->u.ibss.timer); + pr_info("DC %s: del_timer_sync: %p\n", __func__, &sdata->u.ibss.timer); return 0; } diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index b80c9b016b2b..f32b1a969176 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -1492,6 +1492,7 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata, /* clear type-dependent union */ memset(&sdata->u, 0, sizeof(sdata->u)); + pr_info("DC %s: memset(sdata->u): %p\n", __func__, &sdata->u); /* and set some type-dependent values */ sdata->vif.type = type; diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c index 97095b7c9c64..dc734598aebc 100644 --- a/net/mac80211/mesh.c +++ b/net/mac80211/mesh.c @@ -1605,6 +1605,7 @@ void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata) struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; static u8 zero_addr[ETH_ALEN] = {}; + pr_info("DC %s: timer_setup housekeeping: %p\n", __func__, &ifmsh->housekeeping_timer); timer_setup(&ifmsh->housekeeping_timer, ieee80211_mesh_housekeeping_timer, 0); diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index 96f487fc0071..4b52f71878ba 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -4840,6 +4840,7 @@ void ieee80211_sta_setup_sdata(struct ieee80211_sub_if_data *sdata) INIT_WORK(&ifmgd->request_smps_work, ieee80211_request_smps_mgd_work); INIT_DELAYED_WORK(&ifmgd->tdls_peer_del_work, ieee80211_tdls_peer_del_work); + pr_info("DC %s: timer_setup: %p\n", __func__, &ifmgd->timer); timer_setup(&ifmgd->timer, ieee80211_sta_timer, 0); timer_setup(&ifmgd->bcn_mon_timer, ieee80211_sta_bcn_mon_timer, 0); timer_setup(&ifmgd->conn_mon_timer, ieee80211_sta_conn_mon_timer, 0); diff --git a/net/mac80211/ocb.c b/net/mac80211/ocb.c index 7c1a735b9eee..b62de86381bf 100644 --- a/net/mac80211/ocb.c +++ b/net/mac80211/ocb.c @@ -163,6 +163,7 @@ void ieee80211_ocb_setup_sdata(struct ieee80211_sub_if_data *sdata) { struct ieee80211_if_ocb *ifocb = &sdata->u.ocb; + pr_info("DC %s: timer_setup housekeeping: %p\n", __func__, &ifocb->housekeeping_timer); timer_setup(&ifocb->housekeeping_timer, ieee80211_ocb_housekeeping_timer, 0); INIT_LIST_HEAD(&ifocb->incomplete_stations); @@ -233,6 +234,7 @@ int ieee80211_ocb_leave(struct ieee80211_sub_if_data *sdata) skb_queue_purge(&sdata->skb_queue); + pr_info("DC %s: del_timer_sync: %p\n", __func__, &sdata->u.ocb.housekeeping_timer); del_timer_sync(&sdata->u.ocb.housekeeping_timer); /* If the timer fired while we waited for it, it will have * requeued the work. Now the work will be running again diff --git a/net/wireless/ibss.c b/net/wireless/ibss.c index 8f98e546becf..0730ffd92f1d 100644 --- a/net/wireless/ibss.c +++ b/net/wireless/ibss.c @@ -162,8 +162,10 @@ static void __cfg80211_clear_ibss(struct net_device *dev, bool nowext) ASSERT_WDEV_LOCK(wdev); - kfree_sensitive(wdev->connect_keys); - wdev->connect_keys = NULL; + if(wdev->connect_keys) { + kfree_sensitive(wdev->connect_keys); + wdev->connect_keys = NULL; + } rdev_set_qos_map(rdev, dev, NULL); @@ -207,9 +209,6 @@ int __cfg80211_leave_ibss(struct cfg80211_registered_device *rdev, ASSERT_WDEV_LOCK(wdev); - if (!wdev->ssid_len) - return -ENOLINK; - err = rdev_leave_ibss(rdev, dev); if (err) diff --git a/net/wireless/ocb.c b/net/wireless/ocb.c index 2d26a6d980bf..fe677f974d13 100644 --- a/net/wireless/ocb.c +++ b/net/wireless/ocb.c @@ -67,6 +67,7 @@ int __cfg80211_leave_ocb(struct cfg80211_registered_device *rdev, if (!rdev->ops->leave_ocb) return -EOPNOTSUPP; + pr_info("DC %s:\n", __func__); err = rdev_leave_ocb(rdev, dev); if (!err) memset(&wdev->chandef, 0, sizeof(wdev->chandef)); @@ -80,6 +81,7 @@ int cfg80211_leave_ocb(struct cfg80211_registered_device *rdev, struct wireless_dev *wdev = dev->ieee80211_ptr; int err; + pr_info("DC %s:\n", __func__); wdev_lock(wdev); err = __cfg80211_leave_ocb(rdev, dev); wdev_unlock(wdev); diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h index 8b1358d04ca2..fac59c7789d9 100644 --- a/net/wireless/rdev-ops.h +++ b/net/wireless/rdev-ops.h @@ -379,6 +379,7 @@ static inline int rdev_leave_ocb(struct cfg80211_registered_device *rdev, { int ret; trace_rdev_leave_ocb(&rdev->wiphy, dev); + pr_info("DC %s:\n", __func__); ret = rdev->ops->leave_ocb(&rdev->wiphy, dev); trace_rdev_return_int(&rdev->wiphy, ret); return ret; diff --git a/net/wireless/util.c b/net/wireless/util.c index 1bf0200f562a..b5b7923608ab 100644 --- a/net/wireless/util.c +++ b/net/wireless/util.c @@ -1044,6 +1044,7 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev, cfg80211_stop_ap(rdev, dev, true); break; case NL80211_IFTYPE_ADHOC: + pr_info("DC %s: cfg80211_leave_ibss\n", __func__); cfg80211_leave_ibss(rdev, dev, false); break; case NL80211_IFTYPE_STATION: @@ -1055,6 +1056,12 @@ int cfg80211_change_iface(struct cfg80211_registered_device *rdev, break; case NL80211_IFTYPE_MESH_POINT: /* mesh should be handled? */ + pr_info("DC %s: cfg80211_leave_mesh\n", __func__); + cfg80211_leave_mesh(rdev, dev); + break; + case NL80211_IFTYPE_OCB: + pr_info("DC %s: cfg80211_leave_ocb\n", __func__); + cfg80211_leave_ocb(rdev, dev); break; default: break;