Search Linux Wireless

[PATCH v2] mac80211: prevent a wme_qdiscop_init BUG on other devices

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Michael Wu <flamingice@xxxxxxxxxxxx>

This prevents a BUG if the ieee80211 qdisc is being registered on a net dev
without ieee80211_ptr set. It also ensures the device is a mac80211 device.

Signed-off-by: Michael Wu <flamingice@xxxxxxxxxxxx>
---

 net/mac80211/wme.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/net/mac80211/wme.c b/net/mac80211/wme.c
index 3823f15..89ce815 100644
--- a/net/mac80211/wme.c
+++ b/net/mac80211/wme.c
@@ -389,10 +389,15 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct rtattr *opt)
 {
 	struct ieee80211_sched_data *q = qdisc_priv(qd);
 	struct net_device *dev = qd->dev;
-	struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
-	int queues = local->hw.queues;
+	struct ieee80211_local *local;
+	int queues;
 	int err = 0, i;
 
+	/* check that device is a mac80211 device */
+	if (!dev->ieee80211_ptr ||
+	    dev->ieee80211_ptr->wiphy->privid != mac80211_wiphy_privid)
+		return -EINVAL;
+
 	/* check this device is an ieee80211 master type device */
 	if (dev->type != ARPHRD_IEEE80211)
 		return -EINVAL;
@@ -406,6 +411,9 @@ static int wme_qdiscop_init(struct Qdisc *qd, struct rtattr *opt)
 	if (qd->flags & TCQ_F_INGRESS)
 		return -EINVAL;
 
+	local = wdev_priv(dev->ieee80211_ptr);
+	queues = local->hw.queues;
+
 	/* if options were passed in, set them */
 	if (opt) {
 		err = wme_qdiscop_tune(qd, opt);

-
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux