diff options
author | Johannes Berg <johannes.berg@intel.com> | 2012-06-15 08:23:16 -0400 |
---|---|---|
committer | Johannes Berg <johannes.berg@intel.com> | 2012-06-20 04:57:03 -0400 |
commit | 2bd7e35da011f51d4fdb3b71f888c3a50194bfcd (patch) | |
tree | 5c21d882b27059aef8db432bb92c83c02c23113e /net/wireless | |
parent | 878d9ec7367816dc336b0c24e6256596559692b7 (diff) |
nl80211: use __cfg80211_rdev_from_attrs for testmode
To fix the testmode cross-namespace access problem,
use __cfg80211_rdev_from_attrs() to get the device
instead of open-coding similar functionality.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/wireless')
-rw-r--r-- | net/wireless/nl80211.c | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 7e94d4d960bf..06623d064606 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c | |||
@@ -5230,21 +5230,18 @@ static int nl80211_testmode_dump(struct sk_buff *skb, | |||
5230 | nl80211_policy); | 5230 | nl80211_policy); |
5231 | if (err) | 5231 | if (err) |
5232 | return err; | 5232 | return err; |
5233 | if (nl80211_fam.attrbuf[NL80211_ATTR_WIPHY]) { | ||
5234 | phy_idx = nla_get_u32( | ||
5235 | nl80211_fam.attrbuf[NL80211_ATTR_WIPHY]); | ||
5236 | } else { | ||
5237 | struct net_device *netdev; | ||
5238 | 5233 | ||
5239 | err = get_rdev_dev_by_ifindex(sock_net(skb->sk), | 5234 | mutex_lock(&cfg80211_mutex); |
5240 | nl80211_fam.attrbuf, | 5235 | rdev = __cfg80211_rdev_from_attrs(sock_net(skb->sk), |
5241 | &rdev, &netdev); | 5236 | nl80211_fam.attrbuf); |
5242 | if (err) | 5237 | if (IS_ERR(rdev)) { |
5243 | return err; | 5238 | mutex_unlock(&cfg80211_mutex); |
5244 | dev_put(netdev); | 5239 | return PTR_ERR(rdev); |
5245 | phy_idx = rdev->wiphy_idx; | ||
5246 | cfg80211_unlock_rdev(rdev); | ||
5247 | } | 5240 | } |
5241 | phy_idx = rdev->wiphy_idx; | ||
5242 | rdev = NULL; | ||
5243 | mutex_unlock(&cfg80211_mutex); | ||
5244 | |||
5248 | if (nl80211_fam.attrbuf[NL80211_ATTR_TESTDATA]) | 5245 | if (nl80211_fam.attrbuf[NL80211_ATTR_TESTDATA]) |
5249 | cb->args[1] = | 5246 | cb->args[1] = |
5250 | (long)nl80211_fam.attrbuf[NL80211_ATTR_TESTDATA]; | 5247 | (long)nl80211_fam.attrbuf[NL80211_ATTR_TESTDATA]; |