diff options
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/nl80211.c | 3 | ||||
-rw-r--r-- | net/wireless/reg.c | 6 | ||||
-rw-r--r-- | net/wireless/sme.c | 2 | ||||
-rw-r--r-- | net/wireless/trace.h | 3 |
4 files changed, 11 insertions, 3 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index c2853bb..c3ef31a 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -6797,6 +6797,9 @@ void cfg80211_testmode_event(struct sk_buff *skb, gfp_t gfp) void *hdr = ((void **)skb->cb)[1]; struct nlattr *data = ((void **)skb->cb)[2]; + /* clear CB data for netlink core to own from now on */ + memset(skb->cb, 0, sizeof(skb->cb)); + nla_nest_end(skb, data); genlmsg_end(skb, hdr); genlmsg_multicast_netns(wiphy_net(&rdev->wiphy), skb, 0, diff --git a/net/wireless/reg.c b/net/wireless/reg.c index de06d5d..8eedb15 100644 --- a/net/wireless/reg.c +++ b/net/wireless/reg.c @@ -1432,7 +1432,7 @@ static enum reg_request_treatment __regulatory_hint(struct wiphy *wiphy, struct regulatory_request *pending_request) { - const struct ieee80211_regdomain *regd; + const struct ieee80211_regdomain *regd, *tmp; bool intersect = false; enum reg_request_treatment treatment; struct regulatory_request *lr; @@ -1448,7 +1448,9 @@ __regulatory_hint(struct wiphy *wiphy, kfree(pending_request); return PTR_ERR(regd); } + tmp = get_wiphy_regdom(wiphy); rcu_assign_pointer(wiphy->regd, regd); + rcu_free_regdom(tmp); } intersect = true; break; @@ -1468,7 +1470,9 @@ __regulatory_hint(struct wiphy *wiphy, return REG_REQ_IGNORE; } treatment = REG_REQ_ALREADY_SET; + tmp = get_wiphy_regdom(wiphy); rcu_assign_pointer(wiphy->regd, regd); + rcu_free_regdom(tmp); goto new_request; } kfree(pending_request); diff --git a/net/wireless/sme.c b/net/wireless/sme.c index 20e86a9..2f844ee 100644 --- a/net/wireless/sme.c +++ b/net/wireless/sme.c @@ -242,7 +242,6 @@ void cfg80211_conn_work(struct work_struct *work) NULL, 0, NULL, 0, WLAN_STATUS_UNSPECIFIED_FAILURE, false, NULL); - cfg80211_sme_free(wdev); } wdev_unlock(wdev); } @@ -646,6 +645,7 @@ void __cfg80211_connect_result(struct net_device *dev, const u8 *bssid, cfg80211_unhold_bss(bss_from_pub(bss)); cfg80211_put_bss(wdev->wiphy, bss); } + cfg80211_sme_free(wdev); return; } diff --git a/net/wireless/trace.h b/net/wireless/trace.h index ba5f0d6..064b471 100644 --- a/net/wireless/trace.h +++ b/net/wireless/trace.h @@ -2029,7 +2029,8 @@ TRACE_EVENT(cfg80211_michael_mic_failure, MAC_ASSIGN(addr, addr); __entry->key_type = key_type; __entry->key_id = key_id; - memcpy(__entry->tsc, tsc, 6); + if (tsc) + memcpy(__entry->tsc, tsc, 6); ), TP_printk(NETDEV_PR_FMT ", " MAC_PR_FMT ", key type: %d, key id: %d, tsc: %pm", NETDEV_PR_ARG, MAC_PR_ARG(addr), __entry->key_type, |