[PATCH] Fix a channel-to-frequency transformation in ieee80211_chan_to_freq()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The function ieee80211_chan_to_freq() is supposed to return -1 if the
specified channel is unknown. However, current if-conditional statements
do not catch a few wrong combination. For example, {"US", 81, 13} for
country code, operating class, channel, respectively should
return -1 because op_class 81 is not in the list and channel 13 is not
allowed but currently returns 2472 as if it is global.

This patch removes 'if (freq > 0)' to prevent from stepping over when an
input op_class is out of the list of a country then finally going to
ieee80211_chan_to_freq_global(). Instead, it returns result of
sub-function directly which is correct.

Signed-off-by: Siwon Kang <kkangshawn@xxxxxxxxx>
---
 src/common/ieee802_11_common.c | 30 ++++++++----------------------
 1 file changed, 8 insertions(+), 22 deletions(-)

diff --git a/src/common/ieee802_11_common.c b/src/common/ieee802_11_common.c
index a8d68e5..5ba5071 100644
--- a/src/common/ieee802_11_common.c
+++ b/src/common/ieee802_11_common.c
@@ -1133,31 +1133,17 @@ static int ieee80211_chan_to_freq_global(u8 op_class, u8 chan)
  */
 int ieee80211_chan_to_freq(const char *country, u8 op_class, u8 chan)
 {
-	int freq;
+	if (country_match(us_op_class_cc, country))
+		return ieee80211_chan_to_freq_us(op_class, chan);
 
-	if (country_match(us_op_class_cc, country)) {
-		freq = ieee80211_chan_to_freq_us(op_class, chan);
-		if (freq > 0)
-			return freq;
-	}
-
-	if (country_match(eu_op_class_cc, country)) {
-		freq = ieee80211_chan_to_freq_eu(op_class, chan);
-		if (freq > 0)
-			return freq;
-	}
+	if (country_match(eu_op_class_cc, country))
+		return ieee80211_chan_to_freq_eu(op_class, chan);
 
-	if (country_match(jp_op_class_cc, country)) {
-		freq = ieee80211_chan_to_freq_jp(op_class, chan);
-		if (freq > 0)
-			return freq;
-	}
+	if (country_match(jp_op_class_cc, country))
+		return ieee80211_chan_to_freq_jp(op_class, chan);
 
-	if (country_match(cn_op_class_cc, country)) {
-		freq = ieee80211_chan_to_freq_cn(op_class, chan);
-		if (freq > 0)
-			return freq;
-	}
+	if (country_match(cn_op_class_cc, country))
+		return ieee80211_chan_to_freq_cn(op_class, chan);
 
 	return ieee80211_chan_to_freq_global(op_class, chan);
 }
-- 
2.7.4


_______________________________________________
Hostap mailing list
Hostap@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/hostap



[Index of Archives]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux