From: Michael Wu <[email protected]>
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 <[email protected]>
---
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);
On Thu, 03 May 2007 21:02:31 -0400, Michael Wu wrote:
> 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.
Applied, thanks!
Jiri
--
Jiri Benc
SUSE Labs