ath9k: add compile time checking for the size of the channel list
authorFelix Fietkau <nbd@openwrt.org>
Sat, 9 Oct 2010 00:39:30 +0000 (02:39 +0200)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 11 Oct 2010 19:04:21 +0000 (15:04 -0400)
This prevents random memory corruption if the number of channels ever gets
changed without an update to the internal channel array size.

Signed-off-by: Felix Fietkau <nbd@openwrt.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/ath/ath9k/hw.h
drivers/net/wireless/ath/ath9k/init.c

index 7f696c8..6b92334 100644 (file)
@@ -61,6 +61,8 @@
 
 #define ATH9K_RSSI_BAD                 -128
 
+#define ATH9K_NUM_CHANNELS     38
+
 /* Register read/write primitives */
 #define REG_WRITE(_ah, _reg, _val) \
        ath9k_hw_common(_ah)->ops->write((_ah), (_val), (_reg))
@@ -618,7 +620,7 @@ struct ath_hw {
        struct ath9k_hw_version hw_version;
        struct ath9k_ops_config config;
        struct ath9k_hw_capabilities caps;
-       struct ath9k_channel channels[38];
+       struct ath9k_channel channels[ATH9K_NUM_CHANNELS];
        struct ath9k_channel *curchan;
 
        union {
index d76003c..a4c5ed4 100644 (file)
@@ -481,6 +481,10 @@ static int ath9k_init_channels_rates(struct ath_softc *sc)
 {
        void *channels;
 
+       BUILD_BUG_ON(ARRAY_SIZE(ath9k_2ghz_chantable) +
+                    ARRAY_SIZE(ath9k_5ghz_chantable) !=
+                    ATH9K_NUM_CHANNELS);
+
        if (test_bit(ATH9K_MODE_11G, sc->sc_ah->caps.wireless_modes)) {
                channels = kmemdup(ath9k_2ghz_chantable,
                        sizeof(ath9k_2ghz_chantable), GFP_KERNEL);