|
@@ -5230,21 +5230,18 @@ static int nl80211_testmode_dump(struct sk_buff *skb,
|
|
|
nl80211_policy);
|
|
|
if (err)
|
|
|
return err;
|
|
|
- if (nl80211_fam.attrbuf[NL80211_ATTR_WIPHY]) {
|
|
|
- phy_idx = nla_get_u32(
|
|
|
- nl80211_fam.attrbuf[NL80211_ATTR_WIPHY]);
|
|
|
- } else {
|
|
|
- struct net_device *netdev;
|
|
|
|
|
|
- err = get_rdev_dev_by_ifindex(sock_net(skb->sk),
|
|
|
- nl80211_fam.attrbuf,
|
|
|
- &rdev, &netdev);
|
|
|
- if (err)
|
|
|
- return err;
|
|
|
- dev_put(netdev);
|
|
|
- phy_idx = rdev->wiphy_idx;
|
|
|
- cfg80211_unlock_rdev(rdev);
|
|
|
+ mutex_lock(&cfg80211_mutex);
|
|
|
+ rdev = __cfg80211_rdev_from_attrs(sock_net(skb->sk),
|
|
|
+ nl80211_fam.attrbuf);
|
|
|
+ if (IS_ERR(rdev)) {
|
|
|
+ mutex_unlock(&cfg80211_mutex);
|
|
|
+ return PTR_ERR(rdev);
|
|
|
}
|
|
|
+ phy_idx = rdev->wiphy_idx;
|
|
|
+ rdev = NULL;
|
|
|
+ mutex_unlock(&cfg80211_mutex);
|
|
|
+
|
|
|
if (nl80211_fam.attrbuf[NL80211_ATTR_TESTDATA])
|
|
|
cb->args[1] =
|
|
|
(long)nl80211_fam.attrbuf[NL80211_ATTR_TESTDATA];
|