diff options
| -rw-r--r-- | drivers/net/wireless/iwlegacy/iwl-core.c | 7 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlegacy/iwl-dev.h | 6 |
2 files changed, 13 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlegacy/iwl-core.c b/drivers/net/wireless/iwlegacy/iwl-core.c index 2b08efb3b658..dcbb2ef27f22 100644 --- a/drivers/net/wireless/iwlegacy/iwl-core.c +++ b/drivers/net/wireless/iwlegacy/iwl-core.c | |||
| @@ -2155,6 +2155,13 @@ int iwl_legacy_mac_config(struct ieee80211_hw *hw, u32 changed) | |||
| 2155 | goto set_ch_out; | 2155 | goto set_ch_out; |
| 2156 | } | 2156 | } |
| 2157 | 2157 | ||
| 2158 | if (priv->iw_mode == NL80211_IFTYPE_ADHOC && | ||
| 2159 | !iwl_legacy_is_channel_ibss(ch_info)) { | ||
| 2160 | IWL_DEBUG_MAC80211(priv, "leave - not IBSS channel\n"); | ||
| 2161 | ret = -EINVAL; | ||
| 2162 | goto set_ch_out; | ||
| 2163 | } | ||
| 2164 | |||
| 2158 | spin_lock_irqsave(&priv->lock, flags); | 2165 | spin_lock_irqsave(&priv->lock, flags); |
| 2159 | 2166 | ||
| 2160 | for_each_context(priv, ctx) { | 2167 | for_each_context(priv, ctx) { |
diff --git a/drivers/net/wireless/iwlegacy/iwl-dev.h b/drivers/net/wireless/iwlegacy/iwl-dev.h index 9ee849d669f3..f43ac1eb9014 100644 --- a/drivers/net/wireless/iwlegacy/iwl-dev.h +++ b/drivers/net/wireless/iwlegacy/iwl-dev.h | |||
| @@ -1411,6 +1411,12 @@ iwl_legacy_is_channel_passive(const struct iwl_channel_info *ch) | |||
| 1411 | return (!(ch->flags & EEPROM_CHANNEL_ACTIVE)) ? 1 : 0; | 1411 | return (!(ch->flags & EEPROM_CHANNEL_ACTIVE)) ? 1 : 0; |
| 1412 | } | 1412 | } |
| 1413 | 1413 | ||
| 1414 | static inline int | ||
| 1415 | iwl_legacy_is_channel_ibss(const struct iwl_channel_info *ch) | ||
| 1416 | { | ||
| 1417 | return (ch->flags & EEPROM_CHANNEL_IBSS) ? 1 : 0; | ||
| 1418 | } | ||
| 1419 | |||
| 1414 | static inline void | 1420 | static inline void |
| 1415 | __iwl_legacy_free_pages(struct iwl_priv *priv, struct page *page) | 1421 | __iwl_legacy_free_pages(struct iwl_priv *priv, struct page *page) |
| 1416 | { | 1422 | { |
