Commit 49ce708b authored by David S. Miller's avatar David S. Miller

Merge tag 'mac80211-for-davem-2018-12-19' of...

Merge tag 'mac80211-for-davem-2018-12-19' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211

Johannes Berg says:

====================
Just three fixes:
 * fix a memory leak in an error path
 * fix TXQs in interface teardown
 * free fraglist if we used it internally
   before returning SKB
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 3061169a 34b1e0e9
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
* Copyright 2008, Johannes Berg <johannes@sipsolutions.net> * Copyright 2008, Johannes Berg <johannes@sipsolutions.net>
* Copyright 2013-2014 Intel Mobile Communications GmbH * Copyright 2013-2014 Intel Mobile Communications GmbH
* Copyright (c) 2016 Intel Deutschland GmbH * Copyright (c) 2016 Intel Deutschland GmbH
* Copyright (C) 2018 Intel Corporation
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as * it under the terms of the GNU General Public License version 2 as
...@@ -1951,6 +1952,8 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local) ...@@ -1951,6 +1952,8 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local)
WARN(local->open_count, "%s: open count remains %d\n", WARN(local->open_count, "%s: open count remains %d\n",
wiphy_name(local->hw.wiphy), local->open_count); wiphy_name(local->hw.wiphy), local->open_count);
ieee80211_txq_teardown_flows(local);
mutex_lock(&local->iflist_mtx); mutex_lock(&local->iflist_mtx);
list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) { list_for_each_entry_safe(sdata, tmp, &local->interfaces, list) {
list_del(&sdata->list); list_del(&sdata->list);
......
...@@ -1262,7 +1262,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) ...@@ -1262,7 +1262,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
rtnl_unlock(); rtnl_unlock();
ieee80211_led_exit(local); ieee80211_led_exit(local);
ieee80211_wep_free(local); ieee80211_wep_free(local);
ieee80211_txq_teardown_flows(local);
fail_flows: fail_flows:
destroy_workqueue(local->workqueue); destroy_workqueue(local->workqueue);
fail_workqueue: fail_workqueue:
...@@ -1288,7 +1287,6 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw) ...@@ -1288,7 +1287,6 @@ void ieee80211_unregister_hw(struct ieee80211_hw *hw)
#if IS_ENABLED(CONFIG_IPV6) #if IS_ENABLED(CONFIG_IPV6)
unregister_inet6addr_notifier(&local->ifa6_notifier); unregister_inet6addr_notifier(&local->ifa6_notifier);
#endif #endif
ieee80211_txq_teardown_flows(local);
rtnl_lock(); rtnl_lock();
......
...@@ -556,6 +556,11 @@ static void ieee80211_report_used_skb(struct ieee80211_local *local, ...@@ -556,6 +556,11 @@ static void ieee80211_report_used_skb(struct ieee80211_local *local,
} }
ieee80211_led_tx(local); ieee80211_led_tx(local);
if (skb_has_frag_list(skb)) {
kfree_skb_list(skb_shinfo(skb)->frag_list);
skb_shinfo(skb)->frag_list = NULL;
}
} }
/* /*
......
...@@ -8930,8 +8930,10 @@ static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info) ...@@ -8930,8 +8930,10 @@ static int nl80211_join_ibss(struct sk_buff *skb, struct genl_info *info)
if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) { if (info->attrs[NL80211_ATTR_CONTROL_PORT_OVER_NL80211]) {
int r = validate_pae_over_nl80211(rdev, info); int r = validate_pae_over_nl80211(rdev, info);
if (r < 0) if (r < 0) {
kzfree(connkeys);
return r; return r;
}
ibss.control_port_over_nl80211 = true; ibss.control_port_over_nl80211 = true;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment