Commit 32034e05 authored by David S. Miller's avatar David S. Miller

Merge tag 'mac80211-for-davem-2015-02-27' of...

Merge tag 'mac80211-for-davem-2015-02-27' of git://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211

Johannes Berg says:

====================
A few patches have accumulated, among them the fix for Linus's
four-way-handshake problem. The others are various small fixes
for problems all over, nothing really stands out.
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 06615bed 9c1c98a3
...@@ -946,7 +946,8 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw, ...@@ -946,7 +946,8 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
goto nla_put_failure; goto nla_put_failure;
genlmsg_end(skb, msg_head); genlmsg_end(skb, msg_head);
genlmsg_unicast(&init_net, skb, dst_portid); if (genlmsg_unicast(&init_net, skb, dst_portid))
goto err_free_txskb;
/* Enqueue the packet */ /* Enqueue the packet */
skb_queue_tail(&data->pending, my_skb); skb_queue_tail(&data->pending, my_skb);
...@@ -955,6 +956,8 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw, ...@@ -955,6 +956,8 @@ static void mac80211_hwsim_tx_frame_nl(struct ieee80211_hw *hw,
return; return;
nla_put_failure: nla_put_failure:
nlmsg_free(skb);
err_free_txskb:
printk(KERN_DEBUG "mac80211_hwsim: error occurred in %s\n", __func__); printk(KERN_DEBUG "mac80211_hwsim: error occurred in %s\n", __func__);
ieee80211_free_txskb(hw, my_skb); ieee80211_free_txskb(hw, my_skb);
data->tx_failed++; data->tx_failed++;
......
...@@ -1508,6 +1508,8 @@ static void __ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata) ...@@ -1508,6 +1508,8 @@ static void __ieee80211_vif_release_channel(struct ieee80211_sub_if_data *sdata)
if (ieee80211_chanctx_refcount(local, ctx) == 0) if (ieee80211_chanctx_refcount(local, ctx) == 0)
ieee80211_free_chanctx(local, ctx); ieee80211_free_chanctx(local, ctx);
sdata->radar_required = false;
/* Unreserving may ready an in-place reservation. */ /* Unreserving may ready an in-place reservation. */
if (use_reserved_switch) if (use_reserved_switch)
ieee80211_vif_use_reserved_switch(local); ieee80211_vif_use_reserved_switch(local);
...@@ -1566,6 +1568,9 @@ int ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata, ...@@ -1566,6 +1568,9 @@ int ieee80211_vif_use_channel(struct ieee80211_sub_if_data *sdata,
ieee80211_recalc_smps_chanctx(local, ctx); ieee80211_recalc_smps_chanctx(local, ctx);
ieee80211_recalc_radar_chanctx(local, ctx); ieee80211_recalc_radar_chanctx(local, ctx);
out: out:
if (ret)
sdata->radar_required = false;
mutex_unlock(&local->chanctx_mtx); mutex_unlock(&local->chanctx_mtx);
return ret; return ret;
} }
......
...@@ -373,7 +373,7 @@ minstrel_get_rate(void *priv, struct ieee80211_sta *sta, ...@@ -373,7 +373,7 @@ minstrel_get_rate(void *priv, struct ieee80211_sta *sta,
rate++; rate++;
mi->sample_deferred++; mi->sample_deferred++;
} else { } else {
if (!msr->sample_limit != 0) if (!msr->sample_limit)
return; return;
mi->sample_packets++; mi->sample_packets++;
......
...@@ -566,6 +566,7 @@ ieee80211_tx_h_check_control_port_protocol(struct ieee80211_tx_data *tx) ...@@ -566,6 +566,7 @@ ieee80211_tx_h_check_control_port_protocol(struct ieee80211_tx_data *tx)
if (tx->sdata->control_port_no_encrypt) if (tx->sdata->control_port_no_encrypt)
info->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT; info->flags |= IEEE80211_TX_INTFL_DONT_ENCRYPT;
info->control.flags |= IEEE80211_TX_CTRL_PORT_CTRL_PROTO; info->control.flags |= IEEE80211_TX_CTRL_PORT_CTRL_PROTO;
info->flags |= IEEE80211_TX_CTL_USE_MINRATE;
} }
return TX_CONTINUE; return TX_CONTINUE;
......
...@@ -1199,6 +1199,7 @@ static int __init cfg80211_init(void) ...@@ -1199,6 +1199,7 @@ static int __init cfg80211_init(void)
regulatory_exit(); regulatory_exit();
out_fail_reg: out_fail_reg:
debugfs_remove(ieee80211_debugfs_dir); debugfs_remove(ieee80211_debugfs_dir);
nl80211_exit();
out_fail_nl80211: out_fail_nl80211:
unregister_netdevice_notifier(&cfg80211_netdev_notifier); unregister_netdevice_notifier(&cfg80211_netdev_notifier);
out_fail_notifier: out_fail_notifier:
......
...@@ -2654,10 +2654,6 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info) ...@@ -2654,10 +2654,6 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
return err; return err;
} }
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
err = parse_monitor_flags(type == NL80211_IFTYPE_MONITOR ? err = parse_monitor_flags(type == NL80211_IFTYPE_MONITOR ?
info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL, info->attrs[NL80211_ATTR_MNTR_FLAGS] : NULL,
&flags); &flags);
...@@ -2666,6 +2662,10 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info) ...@@ -2666,6 +2662,10 @@ static int nl80211_new_interface(struct sk_buff *skb, struct genl_info *info)
!(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR)) !(rdev->wiphy.features & NL80211_FEATURE_ACTIVE_MONITOR))
return -EOPNOTSUPP; return -EOPNOTSUPP;
msg = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL);
if (!msg)
return -ENOMEM;
wdev = rdev_add_virtual_intf(rdev, wdev = rdev_add_virtual_intf(rdev,
nla_data(info->attrs[NL80211_ATTR_IFNAME]), nla_data(info->attrs[NL80211_ATTR_IFNAME]),
type, err ? NULL : &flags, &params); type, err ? NULL : &flags, &params);
...@@ -12528,9 +12528,7 @@ static int cfg80211_net_detect_results(struct sk_buff *msg, ...@@ -12528,9 +12528,7 @@ static int cfg80211_net_detect_results(struct sk_buff *msg,
} }
for (j = 0; j < match->n_channels; j++) { for (j = 0; j < match->n_channels; j++) {
if (nla_put_u32(msg, if (nla_put_u32(msg, j, match->channels[j])) {
NL80211_ATTR_WIPHY_FREQ,
match->channels[j])) {
nla_nest_cancel(msg, nl_freqs); nla_nest_cancel(msg, nl_freqs);
nla_nest_cancel(msg, nl_match); nla_nest_cancel(msg, nl_match);
goto out; goto out;
......
...@@ -228,7 +228,7 @@ static DECLARE_DELAYED_WORK(reg_timeout, reg_timeout_work); ...@@ -228,7 +228,7 @@ static DECLARE_DELAYED_WORK(reg_timeout, reg_timeout_work);
/* We keep a static world regulatory domain in case of the absence of CRDA */ /* We keep a static world regulatory domain in case of the absence of CRDA */
static const struct ieee80211_regdomain world_regdom = { static const struct ieee80211_regdomain world_regdom = {
.n_reg_rules = 6, .n_reg_rules = 8,
.alpha2 = "00", .alpha2 = "00",
.reg_rules = { .reg_rules = {
/* IEEE 802.11b/g, channels 1..11 */ /* IEEE 802.11b/g, channels 1..11 */
......
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