Browse Source

P2P: Validate the freq in p2p_group_add

Add additional input verification for the frequency parameter in
p2p_group_add (and other P2P operations for that matter). Without this
verification invalid freq could be set and not handled properly.

Signed-hostap: Ilan Peer <ilan.peer@intel.com>
Ilan Peer 11 years ago
parent
commit
d393de1d27
1 changed files with 9 additions and 0 deletions
  1. 9 0
      src/p2p/p2p_utils.c

+ 9 - 0
src/p2p/p2p_utils.c

@@ -109,6 +109,9 @@ int p2p_freq_to_channel(unsigned int freq, u8 *op_class, u8 *channel)
 {
 {
 	/* TODO: more operating classes */
 	/* TODO: more operating classes */
 	if (freq >= 2412 && freq <= 2472) {
 	if (freq >= 2412 && freq <= 2472) {
+		if ((freq - 2407) % 5)
+			return -1;
+
 		*op_class = 81; /* 2.407 GHz, channels 1..13 */
 		*op_class = 81; /* 2.407 GHz, channels 1..13 */
 		*channel = (freq - 2407) / 5;
 		*channel = (freq - 2407) / 5;
 		return 0;
 		return 0;
@@ -121,12 +124,18 @@ int p2p_freq_to_channel(unsigned int freq, u8 *op_class, u8 *channel)
 	}
 	}
 
 
 	if (freq >= 5180 && freq <= 5240) {
 	if (freq >= 5180 && freq <= 5240) {
+		if ((freq - 5000) % 5)
+			return -1;
+
 		*op_class = 115; /* 5 GHz, channels 36..48 */
 		*op_class = 115; /* 5 GHz, channels 36..48 */
 		*channel = (freq - 5000) / 5;
 		*channel = (freq - 5000) / 5;
 		return 0;
 		return 0;
 	}
 	}
 
 
 	if (freq >= 5745 && freq <= 5805) {
 	if (freq >= 5745 && freq <= 5805) {
+		if ((freq - 5000) % 5)
+			return -1;
+
 		*op_class = 124; /* 5 GHz, channels 149..161 */
 		*op_class = 124; /* 5 GHz, channels 149..161 */
 		*channel = (freq - 5000) / 5;
 		*channel = (freq - 5000) / 5;
 		return 0;
 		return 0;