about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorMarc <marc@malloc.me>2022-08-11 09:47:59 +1000
committerGitHub <noreply@github.com>2022-08-11 09:47:59 +1000
commit0a8e930b9f5b39a8d7b7cfb516c1e91223edc431 (patch)
tree6b5b123cd06dbcb6fe691e349c114dbbb5e3dc1c /src
parentff7ca89e128aa69119a334c0aa092840a8ef412c (diff)
parentf0ccb512f32b8276a20f9aa5e45d82982f8ad3d7 (diff)
downloadlibwifi-0a8e930b9f5b39a8d7b7cfb516c1e91223edc431.tar.gz
libwifi-0a8e930b9f5b39a8d7b7cfb516c1e91223edc431.tar.bz2
libwifi-0a8e930b9f5b39a8d7b7cfb516c1e91223edc431.zip
Merge pull request #7 from foxtrot/main
Small cleanup and bugfix for Auth Key Management Suite parsing.
Diffstat (limited to 'src')
-rw-r--r--src/libwifi/parse/management/common.c8
-rw-r--r--src/libwifi/parse/misc/security.c16
2 files changed, 12 insertions, 12 deletions
diff --git a/src/libwifi/parse/management/common.c b/src/libwifi/parse/management/common.c index e847415..5e4fbf6 100644 --- a/src/libwifi/parse/management/common.c +++ b/src/libwifi/parse/management/common.c
@@ -68,7 +68,9 @@ void libwifi_handle_ssid_tag(void *target, int target_type, const char *tag_data
68int libwifi_bss_handle_rsn_tag(struct libwifi_bss *bss, const unsigned char *rsn_data, int rsn_len) { 68int libwifi_bss_handle_rsn_tag(struct libwifi_bss *bss, const unsigned char *rsn_data, int rsn_len) {
69 struct libwifi_rsn_info rsn_info = {0}; 69 struct libwifi_rsn_info rsn_info = {0};
70 70
71 bss->encryption_info &= ~(unsigned int) WEP; 71 if (bss->encryption_info & WEP) {
72 bss->encryption_info &= ~(unsigned int) WEP;
73 }
72 74
73 int min_len = sizeof(rsn_info.rsn_version) + sizeof(struct libwifi_cipher_suite); 75 int min_len = sizeof(rsn_info.rsn_version) + sizeof(struct libwifi_cipher_suite);
74 if (rsn_len < min_len) { 76 if (rsn_len < min_len) {
@@ -105,7 +107,9 @@ int libwifi_bss_handle_msft_tag(struct libwifi_bss *bss, const unsigned char *ms
105 107
106 switch (vendor_header->type) { 108 switch (vendor_header->type) {
107 case MICROSOFT_OUI_TYPE_WPA: 109 case MICROSOFT_OUI_TYPE_WPA:
108 bss->encryption_info &= ~(unsigned int) WEP; 110 if (bss->encryption_info & WEP) {
111 bss->encryption_info &= ~(unsigned int) WEP;
112 }
109 bss->encryption_info |= WPA; 113 bss->encryption_info |= WPA;
110 114
111 // Skip 4 bytes for the OUI (3) and Vendor Tag Type (1) 115 // Skip 4 bytes for the OUI (3) and Vendor Tag Type (1)
diff --git a/src/libwifi/parse/misc/security.c b/src/libwifi/parse/misc/security.c index bf211f7..7a9682b 100644 --- a/src/libwifi/parse/misc/security.c +++ b/src/libwifi/parse/misc/security.c
@@ -62,14 +62,13 @@ int libwifi_get_rsn_info(struct libwifi_rsn_info *info, const unsigned char *tag
62 info->num_pairwise_cipher_suites = suite_count; 62 info->num_pairwise_cipher_suites = suite_count;
63 63
64 // Iterate through the found Pairwise Ciphers, adding them each time 64 // Iterate through the found Pairwise Ciphers, adding them each time
65 struct wifi_cipher_suite *cur_cipher_suite = NULL; 65 struct libwifi_cipher_suite *cur_cipher_suite = NULL;
66 for (int i = 0; i < suite_count; ++i) { 66 for (int i = 0; i < suite_count; ++i) {
67 if (data > tag_end) { 67 if (data > tag_end) {
68 return -EINVAL; 68 return -EINVAL;
69 } 69 }
70 cur_cipher_suite = (struct wifi_cipher_suite *) data; 70 cur_cipher_suite = (struct libwifi_cipher_suite *) data;
71 memcpy(&info->pairwise_cipher_suites[i], cur_cipher_suite, sizeof(struct libwifi_cipher_suite)); 71 memcpy(&info->pairwise_cipher_suites[i], cur_cipher_suite, sizeof(struct libwifi_cipher_suite));
72 info->pairwise_cipher_suites[i].suite_type = info->pairwise_cipher_suites[i].suite_type;
73 data += sizeof(struct libwifi_cipher_suite); 72 data += sizeof(struct libwifi_cipher_suite);
74 } 73 }
75 74
@@ -92,9 +91,8 @@ int libwifi_get_rsn_info(struct libwifi_rsn_info *info, const unsigned char *tag
92 if (data > tag_end) { 91 if (data > tag_end) {
93 return -EINVAL; 92 return -EINVAL;
94 } 93 }
95 cur_cipher_suite = (struct wifi_cipher_suite *) data; 94 cur_cipher_suite = (struct libwifi_cipher_suite *) data;
96 memcpy(&info->auth_key_mgmt_suites[i], cur_cipher_suite, sizeof(struct libwifi_cipher_suite)); 95 memcpy(&info->auth_key_mgmt_suites[i], cur_cipher_suite, sizeof(struct libwifi_cipher_suite));
97 info->auth_key_mgmt_suites[i].suite_type = info->auth_key_mgmt_suites[i].suite_type;
98 data += sizeof(struct libwifi_cipher_suite); 96 data += sizeof(struct libwifi_cipher_suite);
99 } 97 }
100 98
@@ -345,14 +343,13 @@ int libwifi_get_wpa_info(struct libwifi_wpa_info *info, const unsigned char *tag
345 info->num_unicast_cipher_suites = suite_count; 343 info->num_unicast_cipher_suites = suite_count;
346 344
347 // Iterate through the found Unicast Ciphers, adding them each time 345 // Iterate through the found Unicast Ciphers, adding them each time
348 struct wifi_cipher_suite *cur_cipher_suite = NULL; 346 struct libwifi_cipher_suite *cur_cipher_suite = NULL;
349 for (int i = 0; i < suite_count; ++i) { 347 for (int i = 0; i < suite_count; ++i) {
350 if (data > tag_end) { 348 if (data > tag_end) {
351 return -EINVAL; 349 return -EINVAL;
352 } 350 }
353 cur_cipher_suite = (struct wifi_cipher_suite *) data; 351 cur_cipher_suite = (struct libwifi_cipher_suite *) data;
354 memcpy(&info->unicast_cipher_suites[i], cur_cipher_suite, sizeof(struct libwifi_cipher_suite)); 352 memcpy(&info->unicast_cipher_suites[i], cur_cipher_suite, sizeof(struct libwifi_cipher_suite));
355 info->unicast_cipher_suites[i].suite_type = info->unicast_cipher_suites[i].suite_type;
356 data += sizeof(struct libwifi_cipher_suite); 353 data += sizeof(struct libwifi_cipher_suite);
357 } 354 }
358 355
@@ -375,9 +372,8 @@ int libwifi_get_wpa_info(struct libwifi_wpa_info *info, const unsigned char *tag
375 if (data > tag_end) { 372 if (data > tag_end) {
376 return -EINVAL; 373 return -EINVAL;
377 } 374 }
378 cur_cipher_suite = (struct wifi_cipher_suite *) data; 375 cur_cipher_suite = (struct libwifi_cipher_suite *) data;
379 memcpy(&info->auth_key_mgmt_suites[i], cur_cipher_suite, sizeof(struct libwifi_cipher_suite)); 376 memcpy(&info->auth_key_mgmt_suites[i], cur_cipher_suite, sizeof(struct libwifi_cipher_suite));
380 info->auth_key_mgmt_suites[i].suite_type = info->auth_key_mgmt_suites[i].suite_type;
381 data += sizeof(struct libwifi_cipher_suite); 377 data += sizeof(struct libwifi_cipher_suite);
382 } 378 }
383 379