Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2bd7e35d authored by Johannes Berg's avatar Johannes Berg
Browse files

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: default avatarJohannes Berg <johannes.berg@intel.com>
parent 878d9ec7
Loading
Loading
Loading
Loading
+10 −13
Original line number Diff line number Diff line
@@ -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];