mac80211: check channel context methods
authorJohannes Berg <johannes.berg@intel.com>
Thu, 26 Jul 2012 12:46:32 +0000 (14:46 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 16 Oct 2012 18:22:45 +0000 (20:22 +0200)
Verify that the channel context methods are
all assigned by the driver or not used.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/main.c

index 9be3ef1d2e86c61d2e44f673a91a38a0cf848d6a..d709a5d42f69003b39c43c51a7443b6c6e0b414f 100644 (file)
@@ -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