summaryrefslogtreecommitdiffstats
path: root/net/mac80211/main.c
diff options
context:
space:
mode:
authorJohannes Berg2012-07-26 14:46:32 +0200
committerJohannes Berg2012-10-16 20:22:45 +0200
commite269d8600a8f6a9f2387b3f283bfb579a5479dc3 (patch)
treed07057cda19093807cad649db63a1b6f2f5bbc69 /net/mac80211/main.c
parentmac80211: reuse channels for channel contexts (diff)
downloadkernel-qcow2-linux-e269d8600a8f6a9f2387b3f283bfb579a5479dc3.tar.gz
kernel-qcow2-linux-e269d8600a8f6a9f2387b3f283bfb579a5479dc3.tar.xz
kernel-qcow2-linux-e269d8600a8f6a9f2387b3f283bfb579a5479dc3.zip
mac80211: check channel context methods
Verify that the channel context methods are all assigned by the driver or not used. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Diffstat (limited to 'net/mac80211/main.c')
-rw-r--r--net/mac80211/main.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/net/mac80211/main.c b/net/mac80211/main.c
index 9be3ef1d2e86..d709a5d42f69 100644
--- a/net/mac80211/main.c
+++ b/net/mac80211/main.c
@@ -549,6 +549,13 @@ struct ieee80211_hw *ieee80211_alloc_hw(size_t priv_data_len,
if (WARN_ON(ops->sta_state && (ops->sta_add || ops->sta_remove)))
return NULL;
+ /* check all or no channel context operations exist */
+ i = !!ops->add_chanctx + !!ops->remove_chanctx +
+ !!ops->change_chanctx + !!ops->assign_vif_chanctx +
+ !!ops->unassign_vif_chanctx;
+ if (WARN_ON(i != 0 && i != 5))
+ return NULL;
+
/* Ensure 32-byte alignment of our private data and hw private data.
* We use the wiphy priv data for both our ieee80211_local and for
* the driver's private data