mac80211: check add_chanctx callback before use in ieee80211_reconfig
authorArend van Spriel <arend@broadcom.com>
Mon, 19 Nov 2012 11:01:05 +0000 (12:01 +0100)
committerJohannes Berg <johannes.berg@intel.com>
Mon, 19 Nov 2012 13:48:19 +0000 (14:48 +0100)
During testing our mac80211 driver a fatal error occurred which was
signalled to mac80211. Upon performing the reconfiguration of the
device a WARN_ON was triggered. This warning checked the return value
of drv_add_chanctx(). However, this returns -EOPNOTSUPP when the
driver does not provide the callback. As the callback is optional
better check it is defined before calling drv_add_chanctx().

Signed-off-by: Arend van Spriel <arend@broadcom.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/mac80211/util.c

index 5bad758..7fb55bf 100644 (file)
@@ -1417,10 +1417,12 @@ int ieee80211_reconfig(struct ieee80211_local *local)
        }
 
        /* add channel contexts */
-       mutex_lock(&local->chanctx_mtx);
-       list_for_each_entry(ctx, &local->chanctx_list, list)
-               WARN_ON(drv_add_chanctx(local, ctx));
-       mutex_unlock(&local->chanctx_mtx);
+       if (local->use_chanctx) {
+               mutex_lock(&local->chanctx_mtx);
+               list_for_each_entry(ctx, &local->chanctx_list, list)
+                       WARN_ON(drv_add_chanctx(local, ctx));
+               mutex_unlock(&local->chanctx_mtx);
+       }
 
        list_for_each_entry(sdata, &local->interfaces, list) {
                struct ieee80211_chanctx_conf *ctx_conf;