diff options
author | Marc <marc@malloc.me> | 2022-08-11 09:47:59 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-08-11 09:47:59 +1000 |
commit | 0a8e930b9f5b39a8d7b7cfb516c1e91223edc431 (patch) | |
tree | 6b5b123cd06dbcb6fe691e349c114dbbb5e3dc1c /src | |
parent | ff7ca89e128aa69119a334c0aa092840a8ef412c (diff) | |
parent | f0ccb512f32b8276a20f9aa5e45d82982f8ad3d7 (diff) | |
download | libwifi-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.c | 8 | ||||
-rw-r--r-- | src/libwifi/parse/misc/security.c | 16 |
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 | |||
68 | int libwifi_bss_handle_rsn_tag(struct libwifi_bss *bss, const unsigned char *rsn_data, int rsn_len) { | 68 | int 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 | ||